Вы также можете использовать HEBCI: вывод кодовой страницы на основе сущностей HTML , если вы действительно хотите быть уверены, что пользователи, отправляющие текст с помощью дерьмовых браузеров, не повредят вашу магистраль данных.
В Суть Вот как это работает:
Каждая кодовая страница имеет свой отпечаток пальца. Например, один объект "& ordm;" можно использовать для различения Большой тройки: ISO-8859-1 / Windows-1252 (= BA), MacRoman (= BC) и UTF-8 (= C2BA).
В форму вы просто добавляете скрытый ввод, содержащий эти отпечатки пальцев как сущности (например, & deg ;, & split; и & 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','','',''],
);