На самом деле это сводится к проблеме того, как кодируется URL. Если вы щелкнете ссылку на данной странице, браузер будет использовать кодировку страницы для отправки запроса, но если вы введете URL-адрес непосредственно в адресную строку браузера, поведение будет каким-то образом неопределенным, поскольку на кодировка для использования (Firefox предоставляет переключатель about:config
для использования URL-адресов в кодировке UTF-8).
Помимо использования некоторого определения кодировки, невозможно узнать кодировку, используемую с URL-адресом в данном запросе.
EDIT:
Просто для резервного копирования того, что я сказал выше, я написал небольшой тестовый скрипт, который показывает поведение по умолчанию пяти основных браузеров (в моем случае Mac OS X - Windows Vista через Parallels в случае IE):
$p = $_GET['p'];
for ($i = 0; $i < strlen($p); $i++) {
// this displays the binary data received via the URL in hex format
echo dechex(ord($p[$i])) . ' ';
}
Вызов http://path/to/script.php?p=äöü
ведет к
- Safari (4.0.5):
c3 a4 c3 b6 c3 bc
- Firefox (3.6.3):
c3 a4 c3 b6 c3 bc
- Google Chrome (5.0.375.38):
c3 a4 c3 b6 c3 bc
- Опера (10.10):
e4 f6 fc
- Internet Explorer (8.0.6001.18904):
e4 f6 fc
Очевидно, что первые три используют URL-адреса в кодировке UTF-8, в то время как Opera и IE используют ISO-8859-1 или некоторые его варианты. Заключение : вы не можете быть уверены, что такое кодировка текстовых данных, отправляемых через URL.