Сегодня, я изучил HTML-код facebook.com и нашел что-то вроде этого:
<input type="hidden" value="€,´,€,´,水,Д,Є" name="charset_test"/>
Это повторилось два раза в <form>...</form>
.
Какая-либо идея, что этот код мог бы быть полезен для - некоторое клиентское обнаружение набора символов серверной стороны? Насколько я знаю, набор символов браузера передается в Запросе HTTP так или иначе (заголовок "Принимать-набора-символов").
Есть идеи, для чего этот код может быть полезен - для определения кодировки клиента на стороне сервера?
По-видимому, да.
Знак евро полезен для определения кодировки, потому что существует множество способов его кодирования:
Насколько мне известно, кодировка браузера все равно передается в HTTP-запросе (заголовок «Accept-Charset»).
Предполагается, что передается в заголовке HTTP Content-Type
, но это не означает, что пользовательские агенты действительно все понимают правильно.
Я думаю, они соответствуют этому в принимающем скрипте, чтобы убедиться, что клиент послал запрос в правильной кодировке UTF-8 и, возможно, даже, потому что они знают, какие символы ожидать, чтобы обнаружить реальную кодировку "на лету".
Если я правильно помню - однажды мне пришлось с этим разобраться - в IE6 в некоторых ситуациях возникали проблемы с кодировкой формы.
€,´,€,´,水,Д,Є
Я думаю, что некоторые браузеры отправить €
то же самое, что €
и ´
так же как ´
,
Так что они могут проверить как charset_test[0] == charset_test[2] и charset_test[1] == charset_test[3]
Для других символов я понятия не имею. 水, наверное, тест на CJK.
Как говорит Пекка, это для того, чтобы иметь возможность обнаружить кодовую таблицу запроса. Протокол HTTP не предоставляет способа определения кодовой страницы запроса. Из-за этого приходится полагаться на конвенции, не входящие в протокол. Обычно браузеры предсказуемы, но этот трюк - единственный способ быть уверенным на 100%.
Смотрите также: http://www.phpwact.org/php/i18n/charsets