Механизм обнаружения кодировки Facebook? - PullRequest
6 голосов
/ 06 января 2010

Сегодня я посмотрел HTML-код facebook.com и нашел что-то вроде этого:

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

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

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

Ответы [ 4 ]

4 голосов
/ 18 июня 2010

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

Видимо так.

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

  • E2 82 AC в UTF-8
  • 88 в windows-1251
  • 80 в других кодировках windows-125x
  • A4 в ISO-8859-7, -15 и -16
  • A2 E3 в GB18030
  • 85 40 в Shift-JIS

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

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

3 голосов
/ 06 января 2010

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

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

0 голосов
/ 06 января 2010

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

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

0 голосов
/ 06 января 2010
&euro;,&acute;,€,´,水,Д,Є

Я полагаю, какой-нибудь браузер отправляет &euro; так же, как и &acute;, как ´,

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...