UTF-8 проблема с rawurldecode и проблема адресной строки браузера - PullRequest
2 голосов
/ 26 августа 2011

У меня есть некоторые проблемы с rawurldecode с турецким набором символов.

У меня есть турецкое слово (yeşil означает зеленый), которое нужно передать как параметр GET.

Вот моя сгенерированная ссылка.

search.php?renk=ye%C5%9Fil

Когда я щелкаю эту ссылку, адресная строка браузера показывает это так. (Правильно декодируется)

search.php?renk=yeşil

И проблема начинается отсюда. Когда я изменяю URL в адресной строке браузера (например, добавив дополнительный параметр get) и нажимаю клавишу Enter, браузер изменяет ключевое слово и генерирует URL, как показано ниже.

search.php?renk=ye%FEil

После этой точки серверный код не обрабатывает параметр и выдает неверные результаты. Есть ли какой-нибудь стандартный способ избежать этого?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 26 августа 2011

Похоже, ваш браузер конвертирует ссылку в кодировку iso-8859-9 или что-то подобное. % FE кодируется в кодировке iso-8859-9.

Я пробовал iconv("iso8859-9", "utf-8", rawurldecode("search.php?renk=ye%FEil")), и это сработало.

0 голосов
/ 26 августа 2011

URL-адреса всегда используют US-Ascii!

См. RFC: http://www.ietf.org/rfc/rfc1738.txt

Нет соответствующей графики US-ASCII:

URL-адреса записываются только сграфические печатные символы набора кодированных символов US-ASCII.Шестнадцатеричные октеты 80-FF не
используются в US-ASCII, а шестнадцатеричные октеты 00-1F и 7F представляют
управляющие символы;они должны быть закодированы.

Теперь у вас много проблем.если вы вставляете URL в браузер, поле url иногда зависит от локали ОС.браузер может конвертировать его.иногда брандмауэры и прокси могут фильтровать URL-адреса!

следующий важный вопрос: как веб-сервер интерпретирует эти высокие символы.как это передать его в php (в зависимости от шлюза).php автоматически расшифровывает URL, что там будет с вашими высокими символами?php не заботится о кодировании.

, на мой взгляд, это единственное решение, которое нужно сохранить.закодируйте вашу уникальную строку в кодированную строку base64.это будет сохранено в URL - потому что это ascii.

в вашем скрипте, вы можете декодировать его, и вы вернете его в кодировку, которую вы установили ранее.

...