2010-07-07 5 views
4

Dans une application qui accepte, stocke, traite et affiche le texte Unicode (dans le but de la discussion, disons que c'est une application web), quels caractères doivent toujours être retirés du texte entrant ?assainissement texte nu minimum

je peux penser à certains, la plupart du temps répertorié dans la C0 and C1 control codes Wikipedia article:

  1. La gamme 0x00 - 0x19 (contrôle la plupart des caractères), à l'exclusion 0x09 (onglet), 0x0A (LF) et 0x0D (CR)

  2. La gamme 0x7F-0x9F (caractères de commande)

Des plages de caractères qui peuvent être acceptés en toute sécurité serait encore mieux de savoir.

Il existe d'autres niveaux de filtrage de texte - on peut canoniser les caractères qui ont plusieurs représentations, remplacer les caractères insécables et supprimer les caractères de largeur nulle - mais je m'intéresse principalement aux bases.

Répondre

1

Voir la note W3 Unicode in XML and other markup languages. Il définit une classe de caractères comme «déconseillée pour une utilisation dans le balisage», que je filtrerais définitivement pour la plupart des sites Web. Il comprend notamment des personnages tels que:

  • U + 2028-9 qui sont géniaux qui les nouvelles lignes JavaScript embrouiller si vous essayez de les utiliser dans une chaîne littérale; U + 202A-E sont des codes de contrôle bidi que les utilisateurs astucieux peuvent insérer pour faire apparaître le texte en arrière dans certains navigateurs, même en dehors d'un élément HTML donné;

  • codes de contrôle de substitution de langue qui pourraient également avoir une portée à l'extérieur d'un élément;

  • BOM.

De plus, vous voulez filtrer/remplacer les caractères qui ne sont pas valides dans Unicode (U + FFFF et al), et, si vous utilisez une langue qui fonctionne en UTF-16 en mode natif (par exemple, Java, Python sous Windows), tous les caractères de substitution (U + D800-U + DFFF) qui ne forment pas de paires de substitution valides.

La gamme 0x00-0x19 (contrôle la plupart des caractères), à l'exclusion 0x09 (onglet), 0x0A (LF) et 0x0D (CR)

Et sans doute (en particulier pour une application Web), perdre CR ainsi, et tourner les languettes dans les espaces.

La gamme 0x7F-0x9F (caractères de contrôle)

Eh oui, loin avec ceux, sauf dans le cas où les gens pourraient vraiment les dire. (SO utilisés pour leur permettre, ce qui a permis aux gens d'afficher les chaînes qui avaient été mal décodées, ce qui était parfois utile pour diagnostiquer les problèmes Unicode). Pour la plupart des sites Je pense que vous ne voulez.

0

Je suppose que cela dépend de votre objectif. En UTF-8, vous pouvez limiter l'utilisateur aux caractères du clavier si c'est votre fantaisie, qui est 9,10,13, [32-126]. Si vous utilisez UTF-8, la plage 0x7f + signifie que vous avez un caractère Unicode multi-octets. En ASCII, 0x7f + se compose de caractères d'affichage/de format spéciaux et est localisé pour autoriser les extensions en fonction de la langue de l'emplacement. Notez qu'en UTF-8, les caractères du clavier peuvent différer en fonction du lieu, puisque les utilisateurs peuvent entrer des caractères dans leur langue maternelle qui seront en dehors de la plage 0x00-0x7f si leur langue n'utilise pas un script latin sans accents (Arabe, Chinois, Japonais, Grec, Crylique, etc.).

Si vous jetez un oeil here vous pouvez voir quels caractères de UTF-8 s'affichent.

+0

Merci, mais je ne suis pas essayer de limiter le texte à caractères du clavier, je veux juste pour filtrer les caractères qui pourraient avoir des résultats inattendus ou dangereux, comme le caractère nul. – s4y