如果您真的希望確定用戶使用蹩腳瀏覽器發送文本不會破壞您的數據主幹,您也可以使用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