cgi.escape semble être un choix possible. Ça marche bien? Y at-il quelque chose qui est considéré comme meilleur?
Réponses
Trop de publicités?cgi.escape
est fine. Il s'échappe:
-
<
de<
-
>
de>
-
&
de&
C'est assez pour tous HTML.
EDIT: Si vous avez de la non-ascii caractères vous aussi vous voulez échapper, pour inclusion dans un autre document codé qui utilise un codage différent, comme Craig dit, il suffit d'utiliser:
data.encode('ascii', 'xmlcharrefreplace')
N'oubliez pas de décoder data
de unicode
d'abord, quel que soit le codage il a été encodé.
Cependant, dans mon expérience, ce type de codage est inutile si vous venez de travailler avec unicode
tout le temps depuis le début. Juste coder à la fin de l'encodage spécifié dans l'en-tête (utf-8
pour un maximum de compatibilité).
Exemple:
>>> cgi.escape(u'<a>bá</a>').encode('ascii', 'xmlcharrefreplace')
'<a>bá</a>
Également intéressant de noter (merci Greg) est l'extra - quote
paramètre cgi.escape
prend. Avec elle la valeur True
, cgi.escape
échappe également des guillemets doubles caractères ("
) de sorte que vous pouvez utiliser la valeur obtenue dans un XML/HTML attribut.
EDIT: Notez que cgi.l'évasion a été déprécié en Python 3.2 en faveur de l' html.escape
, qui fait la même chose sauf qu' quote
valeur par défaut est True.
Si vous souhaitez échapper HTML dans une URL:
Ce n'est probablement PAS ce que l'OP voulait (la question n'est pas clairement indiquer dans quel contexte l'échappement est destiné à être utilisé), mais Python à la bibliothèque native urllib a une méthode pour échapper à des entités HTML qui doivent être inclus dans une URL en toute sécurité.
Voici un exemple:
#!/usr/bin/python
from urllib import quote
x = '+<>^&'
print quote(x) //prints '%2B%3C%3E%5E%26'
cgi.échapper devrait être bon pour échapper HTML dans le sens limité de s'en échapper, les balises HTML et les entités de caractères.
Mais vous pourriez avoir à envisager également des problèmes d'encodage: Si le code HTML que vous voulez citer a des caractères non-ASCII dans un codage particulier, alors vous devez également avoir à prendre soin de vous représenter ces sensiblement en citant. Vous pourriez peut-être convertir les entités. Sinon, vous devez vous assurer que le codage correct traductions sont faites entre la "source" de HTML et la page dans laquelle il est monté, pour éviter d'endommager les caractères non-ASCII.