2010-01-06 3 views
6

Сегодня я смотрел в HTML код facebook.com, и нашел что-то вроде этого:Facebook механизм набора символов?

<input type="hidden" value="€,´,€,´,水,Д,Є" name="charset_test"/> 

Это повторяется два раза внутри <form>...</form>.

Любая идея, для чего этот код может быть полезен - какое-то определение клиентского кодирования на стороне сервера? Насколько я знаю, браузерная кодировка в любом случае передается в HTTP-запросе (заголовок «Accept-Charset»).

ответ

4

Любая идея, что этот код может быть полезно - своего рода обнаружения клиента кодировок на стороне сервера?

Видимо так.

Знак евро полезен для обнаружения кодировок, потому что есть так много способов кодирования его:

  • E2 82 AC в UTF-8
  • 88 в окнах-1251
  • 80 в другой окна-125X кодировки
  • A4 в ISO-8859-7, -15, -16 и
  • А2 E3 в GB18030
  • 85 40 в Shift-JIS
  • т.д.

Насколько я знаю, браузер кодировка передается в HTTP-запросе в любом случае (заголовок "Accept-Charset").

Это предполагается к передаче в HTTP-заголовке Content-Type, но это не означает, что агенты пользователя на самом деле получить это право.

3

Я думаю, они соответствуют этому в сценарии получения, чтобы убедиться, что клиент отправил запрос, правильно закодированный как UTF-8, и, возможно, даже, потому что он знает, какие символы ожидать, чтобы определить фактическую кодировку «на лету».

Если я правильно помню - мне приходилось иметь дело с ним один раз - в некоторых случаях в IE6 были проблемы с кодировкой формы.

+0

Спасибо, я собираюсь сообщить об этой проблеме, связанной с IE6. – Void

+0

Возможно, я ошибаюсь, но я думаю, что это было что-то вроде двусмысленных кодировок (т. Е. Когда заголовок «content-type» говорит что-то, отличное от тега META «content-type»). Во всяком случае, я думаю, что Facebook делает это, потому что к ним обращаются всевозможные клиенты, и им нужно убедиться, что их кодировка в целом правильная. –

0
&euro;,&acute;,€,´,水,Д,Є 

Я думаю, некоторые браузер отправить &euro; же как и &acute; же как ´,

Таким образом, они могут проверить, как charset_test [0] == charset_test [2] и charset_test [1] == charset_test [ 3]

Для других других персонажей у меня нет подсказки.水 вероятно, тест для CJK.

0

Как говорит Пекка, это позволяет обнаруживать кодировку запроса. Протокол HTTP не предоставляет способ указать кодировку запроса. Из-за этого приходится полагаться на соглашения вне протокола. Обычно браузеры предсказуемы, но этот трюк - единственный способ быть на 100% уверенным.

Смотрите также: http://www.phpwact.org/php/i18n/charsets

Смежные вопросы