158 votes

Quel est le moyen le plus simple d'échapper à HTML en Python?

cgi.escape semble être un choix possible. Ça marche bien? Y at-il quelque chose qui est considéré comme meilleur?

184voto

nosklo Points 75862

cgi.escape est fine. Il s'échappe:

  • < de &lt;
  • > de &gt;
  • & de &amp;

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')
'&lt;a&gt;b&#225;&lt;/a&gt;

É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.

157voto

Maciej Ziarko Points 3236

En Python 3.2, un nouveau module html été introduit, utilisé pour échapper les caractères réservés du balisage HTML.

Il a une fonction escape() :

 >>> import html
>>> html.escape('x > 2 && x < 7')
'x &gt; 2 &amp;&amp; x &lt; 7'
 

12voto

SuperFamousGuy Points 488

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'

Trouver des docs ici

7voto

Craig McQueen Points 13194

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X