Gestion des entités HTML et XML dans un texte en Python

Vous voulez remplacer des entités HTML ou XML telles que &entity ; ou &#code; par leur texte correspondant. Alternativement, vous avez besoin de produire du texte, mais d’échapper à certains caractères (par exemple, <, >, ou &). Donc, lisez cet article jusqu’à la fin.

Si vous produisez du texte, remplacer des caractères spéciaux tels que < ou > est relativement facile si vous utilisez la fonction html.escape(). Par exemple:

>>> s = 'Les éléments s\'écrivent comme "<tag>texte</tag>".'

>>> import html

>>> print(s)
Les éléments s'écrivent comme "<tag>texte</tag>".

>>> (executing lines 1 to 80 of "format.py")

>>> print(html.escape(s))
Les éléments s&#x27;écrivent comme &quot;&lt;tag&gt;texte&lt;/tag&gt;&quot;.

>>> # Désactiver l'échappement des guillemets

>>> print(html.escape(s, quote=False))
Les éléments s'écrivent comme "&lt;tag&gt;texte&lt;/tag&gt;".

>>>

 

Si vous essayez de convertir du texte en ASCII et que vous souhaitez intégrer des entités de codes de caractères pour des caractères non ASCII, vous pouvez utiliser l’argument errors=’xmlcharrefreplace’ à diverses fonctions liées aux E/S pour le faire. Par exemple:

>>> s = 'Fred Papeño'

>>> s.encode('ascii', errors='xmlcharrefreplace')
b'Fred Pape&#241;o'

>>>

 

Pour remplacer les entités dans le texte, une approche différente est nécessaire. Si vous traitez actuellement du HTML ou du XML, essayez d’abord d’utiliser un parseur HTML ou XML approprié.

Normalement, ces outils se chargeront automatiquement de remplacer les valeurs pour vous pendant le parsage et vous n’avez pas à vous en soucier.

Si, pour une raison quelconque, vous avez reçu du texte brut contenant des entités et que vous voulez les remplacer manuellement, vous pouvez généralement le faire en utilisant diverses fonctions/méthodes associées à des parseurs HTML ou XML. Par exemple:

>>> s = 'Fred &quot;Pape&#241;o&quot.'
>>> from html.parser import HTMLParser
>>> p = HTMLParser()
>>> p.unescape(s)
'Fred "Papeño".'

 

>>> 
>>> t = 'The prompt is &gt;&gt;&gt;'
>>> from xml.sax.saxutils import unescape
>>> unescape(t)
'The prompt is >>>'

>>>

 

L’échappement correct des caractères spéciaux est un détail facilement négligé de la génération HTML ou XML.

C’est particulièrement vrai si vous générez vous-même un tel résultat en utilisant print() ou d’autres fonctions de formatage des chaînes de caractères. L’utilisation d’une fonction utilitaire telle que html.escape() est une solution facile.

Si vous avez besoin de traiter du texte dans l’autre sens, diverses fonctions utilitaires, telles que xml.sax.sax.saxutils.unescape(), peuvent vous aider.

Cependant, vous avez vraiment besoin d’enquêter sur l’utilisation d’un parseur approprié.

Par exemple, si vous traitez du HTML ou du XML, l’utilisation d’un module de parsage tel que html.parser ou xml.etree.ElementTree doit déjà prendre en charge les détails relatifs au remplacement des entités dans le texte saisi.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here