如果您真的希望确定用户使用蹩脚浏览器发送文本不会破坏您的数据主干,您也可以使用HEBCI: HTML Entity-Based Codepage Inference技术。
在本质这是它如何工作的:
每个代码页都有自己的指纹图谱。例如,单个实体“& ordm”可以用来区分三巨头:ISO-8859-1/Windows-1252(= BA),MacRoman(= BC)和UTF-8(= C2BA)。
在一种形式中只需添加包含这些指纹作为实体的一个隐藏的输入(如&度;, &分,和& MDASH;),并且当用户提交表单你只需检查返回的十六进制值,并比较他们对你的指纹表。 如果这不匹配,只有那么继续其他回退解决方案。
稍大一点的实现只有五码点的伟大工程:
my @fp_ents = qw/deg divide mdash bdquo euro/;
my %fingerprints = (
"UTF-8" => ['c2b0','c3b7','e28094','e2809e','e282ac'],
"WINDOWS-1252" => ['b0','f7','97','84','80'],
"MAC" => ['a1','d6','d1','e3','db'],
"MS-HEBR" => ['b0','ba','97','84','80'],
"MAC-CYRILLIC" => ['a1','d6','d1','d7',''],
"MS-GREEK" => ['b0','','97','84','80'],
"MAC-IS" => ['a1','d6','d0','e3',''],
"MS-CYRL" => ['b0','','97','84','88'],
"MS932" => ['818b','8180','815c','',''],
"WINDOWS-31J" => ['818b','8180','815c','',''],
"WINDOWS-936" => ['a1e3','a1c2','a1aa','',''],
"MS_KANJI" => ['818b','8180','','',''],
"ISO-8859-15" => ['b0','f7','','','a4'],
"ISO-8859-1" => ['b0','f7','','',''],
"CSIBM864" => ['80','dd','','',''],
);
我不得不看Facebook的登录-HTML源在2012年5月,发现他们实际使用这种技术,哈哈! – GitaarLAB 2012-07-24 04:42:24