Перевести URLENCODED-данные в UTF-8 в PHP - PullRequest
0 голосов
/ 29 января 2011

У меня есть строка, которая находится в моей базе данных, например 中华武魂, когда я публикую свой запрос на получение данных через мой веб-сайт, я получаю данные на сервер в формате %E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82

* 1004Какие шаги по расшифровке я должен предпринять, чтобы вернуть его в форму?В то же время очищает ввод данных пользователем, чтобы убедиться, что они не попытаются выполнить инъекцию SQL?(escape-строка до или после кодирования?)

EDIT:

 rawurldecode();  // returns "中åŽæ­¦é­‚"
 urldecode();     // returns "中åŽæ­¦é­‚"


public function utf8_urldecode($str) { 
    $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); 
    return html_entity_decode($str,null,'UTF-8'); 
}
 // returns "中åŽæ­¦é­‚"

... что на самом деле работает , когда я пытаюсь использовать его в операторе SQL.

Я думаю, потому что я делал echo и die(); без указания заголовка UTF-8 (таким образом, я предполагаю, что это читалось мне как латиница)

Спасибо за помощь!

Ответы [ 2 ]

2 голосов
/ 29 января 2011

Когда ваши данные в действительности представляют собой закодированную форму в процентах, вам просто нужно позвонить rawurldecode:

$data = '%E4%B8%AD%E5%8D%8E%E6%AD%A6%E9%AD%82';
$str = rawurldecode($data);

Этого достаточно, поскольку данные уже кодируются в UTF-8: (U + 4E2D) кодируется с помощью последовательности байтов 0xE4B8AD в UTF-8 и кодируется с помощью %E4%B8%AD при использовании процентного кодирования.

То, что ваши выходные данные выглядят не так, как ожидалось, возможно, потому что выходные данные интерпретируются с неверной кодировкой символов, вероятно Windows-1252 вместо UTF-8. Поскольку в Windows-1252 0xE4 представляет ä, 0xB8 представляет ¸, 0xAD представляет å и т. Д. Поэтому убедитесь, что правильно указывает кодировку выходных символов .

1 голос
/ 29 января 2011

Используйте URL-код PHP: http://php.net/manual/en/function.urldecode.php

У вас есть выбор здесь: urldecode или rawurldecode.

Если вы закодировали свою строку с помощью urlencode, вы должны использовать urldecode из-за способа обработки пробелов.Хотя urlencode преобразует пробелы в +, это не то же самое с rawurlencode.

...