php, urldecode () и умляут - ö - PullRequest
       3

php, urldecode () и умляут - ö

1 голос
/ 27 октября 2010

При использовании PHP 5.3.2 у меня возникают проблемы с обработкой запроса для страницы, имя которой содержит умлаут: ö

Выполнение запроса с использованием Firefox + Live HTTP Headers для test_ö_test.htmна странице, я вижу, что Firefox автоматически конвертирует / кодирует умляут, когда он делает запрос:

GET /test_%C3%B6_test.htm HTTP/1.1

Теперь, используя http://meyerweb.com/eric/tools/dencoder/ Я могу кодировать / декодировать между test_ö_test.htm и test_%C3% B6_test.htm, поэтому я считаю, что кодировка правильная.

Используя PHP urldecode (), я получаю test_ötest.htm

И возвращается ненавистный 404.Обратите внимание, что test_ö_test.htm существует в файловой системе.

Когда я тестирую с escape-кодом javascript (), я получаю test_% F6_test.htm.Когда я подключаю его к своему браузеру, страница с контентом возвращается успешно.urldecode () превращает это обратно в умлаут.

1 Ответ

2 голосов
/ 10 ноября 2010

Ваша страница объявлена ​​как ISO-8859-1, а ваши данные в кодировке UTF-8.В результате браузер пытается интерпретировать двухбайтовую последовательность UTF-8 0xc3 0xb6 как двухсимвольную последовательность Latin-1 «LATIN CAPITAL LETTER A WITH TILDE» «PILCROW SIGN»Ваши данные и кодировка содержимого страницы должны быть согласованы.

...