2010-01-06 51 views
6

今天,我特地到facebook.com的HTML代码,并发现了这样的事情: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和
  • A2 E3在GB18030
  • 85 40在移位-JIS

据我所知,浏览器的字符集被在HTTP请求无论如何(一个“接收字符集”报头)来发送。

应该在HTTP Content-Type头中发送的,但这并不意味着用户代理实际上得到它的权利。

3

我猜他们在接收脚本中匹配这个,以确保客户端正确地发送了编码为UTF-8的请求,甚至可能是因为他们知道预期的字符,以实时检测实际的编码。

如果我没有记错 - 我不得不处理一次 - 在某些情况下,IE6中的表单编码存在问题。

+0

谢谢,我要去google关于这个IE6相关的表单问题。 – Void 2010-01-06 12:30:38

+0

我可能是错的,但我认为它是关于不明确的编码的东西(即当内容类型标题说明与内容类型META标签不同时)。无论如何,我认为Facebook正在这样做,因为他们正在被各种客户访问,他们需要确保他们的编码是正确的。 – 2010-01-06 12:59:38

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

我猜有些浏览器发送&euro;一样&acute;一样´

因此,他们可以检查像charset_test [0] == charset_test [2]和charset_test [1] == charset_test [ 3]

对于其他人物,我不知道。水可能测试CJK。

0

正如Pekka所说,这是为了能够检测请求字符集。 HTTP协议不提供指定请求字符集的方法。因此,人们必须依赖协议之外的约定。通常浏览器是可预测的,但这个诀窍是百分之百确定的唯一方法。

参见:http://www.phpwact.org/php/i18n/charsets