Facebook字符集检测机制?

时间:2010-01-06 12:11:03

标签: php html forms facebook character-encoding

今天,我查看了facebook.com的HTML代码,发现了类似的内容:

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

它在<form>...</form>内重复了两次。

知道这段代码可能有用 - 某种服务器端客户端字符集检测?据我所知,浏览器字符集无论如何都是在HTTP请求中传输的(“Accept-Charset”标题)。

4 个答案:

答案 0 :(得分:4)

  

知道这段代码可能对什么有用 - 某种服务器端客户端字符集检测?

显然是这样。

欧元符号对于字符集检测非常有用,因为有很多编码方式:

  • E2 82 AC,UTF-8
  • 88 in windows-1251
  • 其他windows-125x编码中的80
  • A4 in ISO-8859-7,-15和-16
  • GB18030中的A2 E3
  • Shift-JIS
  • 中的85 40
  

据我所知,浏览器字符集无论如何都是在HTTP请求中传输的(“Accept-Charset”标题)。

假设在HTTP Content-Type标头中传输,但这并不意味着用户代理实际上是正确的。

答案 1 :(得分:3)

我猜他们在接收脚本中对此进行匹配,以确保客户端将请求正确编码为UTF-8,甚至可能因为他们知道期望的字符,即可实时检测实际编码。

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

答案 2 :(得分:0)

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

我猜某些浏览器发送&euro;相同,&acute;´相同,

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

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

答案 3 :(得分:0)

正如Pekka所说,这是为了能够检测到请求字符集。 HTTP协议不提供指定请求的字符集的方法。因此,必须依赖协议之外的约定。通常浏览器是可预测的,但这种技巧是100%确定的唯一方法。

另请参阅:http://www.phpwact.org/php/i18n/charsets