2010-10-27 1 views
1

Использование PHP 5.3.2, у меня возникают проблемы с обработкой запроса на странице, чье имя имеет умляут в нем: öPHP, urldecode() и умляут - ö

делая запрос с помощью Firefox + Живите HTTP-заголовки для страницы test_ö_test.htm, я могу видеть, светлячок автоматически преобразует/кодирует умляут, когда он делает запрос:

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

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

Использование urldecode РНР(), я получаю test_ö_test.htm

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

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

+1

urldecode() является однобайтным, а% C3% B6 кажется многобайтным. Во всяком случае, почему бы не кодировать имена ваших страниц на стороне сервера? Или, что еще лучше, не использовать расширенные символы вообще. –

+0

Возможный дубликат [Расшифровка URL в PHP] (http://stackoverflow.com/questions/1756862/url-decoding-in-php) –

+0

Да, это в основном такая же проблема - с удовольствием удаляем это при желании. – starmonkey

ответ

2

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

+0

Спасибо за последующие действия - оценили. – starmonkey