2010-11-14 17 views
1

J'ai une page ASP.Net, où un utilisateur peut entrer du texte dans un TEXTAREA et le soumettre au serveur. Ce texte sera stocké dans une base de données et sera présenté dans une application winform.Détection de page de code navigateur

Comment puis-je m'assurer que le winform application présente les caractères exacts que l'utilisateur a saisis dans TEXTAREA.

En d'autres termes, ai-je un problème potentiel, par exemple si l'utilisateur saisit des lettres spécifiques à une langue, telles que Æ, Ø et Å, qui sont des lettres danoises?
Ces lettres ont des codes différents en fonction de la page de codes, donc pour autant que je puisse voir, j'ai besoin de savoir quelle page de code le contrôle TEXTAREA montre son entrée. Ou ai-je quelque chose ici?

J'ai essayé de trouver du matériel sur ce sujet sur le net, mais il est difficile de trouver quelque chose qui résout ce problème. J'ai généralement trouvé des pages parlant de la page de codes que le serveur doit utiliser pour que le navigateur puisse afficher correctement les données envoyées.

Mais ma question va dans l'autre sens, c'est-à-dire de client à serveur.

Répondre

0

Vous pouvez regarder l'en-tête de type de contenu pour trouver le codage.

Pour plus de détails, voir this SO répondre à une question connexe.

1

Vous pouvez également utiliser la technique HEBCI: HTML Entity-Based Codepage Inference si vous voulez vraiment être sûr que les utilisateurs qui envoient du texte avec des navigateurs corrompus ne corrompent pas votre backbone de données.

En essence Voici comment cela fonctionne:

Chaque codepage a sa propre empreinte digitale. Par exemple l'entité unique "& ordm;" pourrait être utilisé pour distinguer les trois grands: ISO-8859-1/Windows-1252 (= BA), MacRoman (= BC), et UTF-8 (= C2BA).

Dans un formulaire, vous ajoutez simplement une entrée cachée contenant les empreintes digitales que l'entité (comme & ° ;, & diviser ;, et & mdash;) et lorsque les utilisateurs Soumet le formulaire que vous consultez les hexagonaux-valeurs retournées et comparer les contre votre table d'empreintes digitales. Si cela ne donne pas une correspondance, alors seulement continuer d'autres solutions de repli.

Une implémentation légèrement plus grand fonctionne très bien avec seulement cinq points de code:

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

je devais regarder login-html-source facebook en mai 2012 et remarqué qu'ils utilisent réellement cette technique, lol! – GitaarLAB