2010-11-14 4 views
1

У меня есть страница ASP.Net, где пользователь может ввести текст в TEXTAREA и отправить его на сервер. Этот текст будет сохранен в базе данных и будет представлен в приложении winform.Обнаружение кодовой страницы браузера

Как я могу убедиться, что winform application представляет точные символы, введенные пользователем в TEXTAREA.

То есть у меня есть потенциальная проблема, например, если пользователь вводит специальные специальные буквы, такие как Æ, Ø и Å, которые являются датскими буквами?
Эти буквы имеют разные коды в зависимости от кодовой страницы, поэтому, насколько я могу судить, мне нужно знать, какая кодовая страница содержит элемент управления TEXTAREA. Или мне что-то не хватает?

Я попытался найти материал по этому вопросу в сети, но трудно найти что-то, что решает эту проблему. Я обычно нашел, что страницы говорят о том, какую кодовую страницу требуется серверу для использования браузером, чтобы правильно отображать отправленные данные.

Но мой вопрос идет другим путем, то есть от клиента к серверу.

ответ

0

Вы можете посмотреть заголовок содержимого, чтобы узнать кодировку.

Подробнее см. this. Ответьте на соответствующий вопрос.

1

Вы также можете использовать технику HEBCI: HTML Entity-Based Codepage Inference, если вы действительно хотите быть уверенным, что пользователи, отправляющие текст с дерьмовыми браузерами, не повреждают вашу базу данных.

В сущности это то, как он работает:

Каждый кодовая имеет свой собственный палец-печати. Например, единый объект «& ordm;» может использоваться для различения Большой тройки: ISO-8859-1/Windows-1252 (= BA), MacRoman (= BC) и UTF-8 (= C2BA).

В форме вы просто добавляете скрытый вход, содержащий эти отпечатки пальцев, как субъекта (например, & град ;, & разделяй ;, и & mdash;), и когда пользователи отправляет форму вы просто проверить возвращаемые HEX-значения и сравнить их против вашего стола с отпечатками пальцев. ЕСЛИ это не дает совпадения, только ТОГДА продолжают другие решения о возврате.

немного большего размера реализация прекрасно работает только пять кодовых:

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','','',''], 
); 
+0

Я должен был смотреть на логин-HTML-источника facebook в мае 2012 года, и заметил, что они на самом деле использовать эту технику, лол! – GitaarLAB