Привет,
Есть локальная машинка, на которой пишется и отлаживается всякое разное, преимущественно на PHP. Обнаружил странное (не сказать — неприятное) поведение разных браузеров при кодировании запроса.
Вот тестовый файлик:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Превед</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p>
<?php
echo '<strong>'.$_GET['param'].'</strong><br />';
echo $_SERVER['HTTP_USER_AGENT'].'<br />';
echo $_SERVER['HTTP_ACCEPT_CHARSET'].'<br />';
?>
</p>
</body>
</html>
* This source code was highlighted with Source Code Highlighter.
А вот, что любопытно, результат:
Вот — firebug с ответом сервера:
HTTP/1.1 200 OK
Date: Sun, 22 Jan 2012 22:02:57 GMT
Server: Apache/2.2.20 (Win32) PHP/5.2.17
X-Powered-By: PHP/5.2.17
Content-Length: 467
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Как видно, UTF-8 в запросе передает только Chrome (я не менял никаких настроек в браузерах). Все остальные начинают нормально отображать введенную кириллицу только при явном переключении браузера на Win-1251.
Меня несколько смущает такое поведение, причем, в основном тем, что я не могу понять — то ли надо больше спать и меньше писать руками в адресной строке, то ли все же что-то надо исправлять :)
Больше всего напрягает то, что в реальном проекте определить кодировку входных данных весьма непросто (вот
тут тема раскрыта очень хорошо). Еще несколько непонятен тот факт, что те же браузеры к википедии,
например, абсолютно корректно все передают.
Что и где неправильно?