Existe-t-il une fonction similaire ou équivalente en Python à la fonction PHP htmlspecialchars()? La chose la plus proche que j'ai trouvée jusqu'ici est htmlentitydefs.entitydefs().Existe-t-il un équivalent Python à la fonction PHP htmlspecialchars()?
Répondre
Si vous utilisez django 1.0, vos variables de modèle seront déjà encodées et prêtes à être affichées. Vous utilisez également l'opérateur safe
{{ var|safe }}
si vous ne souhaitez pas l'activer globalement.
La chose la plus proche que je connaisse est cgi.escape.
Vous voulez probablement xml.sax.saxutils.escape:
from xml.sax.saxutils import escape
escape(unsafe, {'"':'"'}) # ENT_COMPAT
escape(unsafe, {'"':'"', '\'':'''}) # ENT_QUOTES
escape(unsafe) # ENT_NOQUOTES
Jetez un oeil à xml.sax.saxutils.quoteattr, il pourrait être plus utile pour vous
Le module html.entities
(htmlentitydefs
pour 2.x python) contient un dictionnaire qui devrait codepoint2name
fais ce dont tu as besoin.
>>> import html.entities
>>> html.entities.codepoint2name[ord("&")]
'amp'
>>> html.entities.codepoint2name[ord('"')]
'quot'
from django.utils.html import escape
print escape('<div class="q">Q & A</div>')
Je vote pour cela parce que je ne veux pas analyser quelque chose comme d'autres réponses, ou même faire une recherche et remplacer, je veux une seule fonction qui fait tout pour moi. – paulmorriss
Je pense que la façon la plus simple est d'utiliser simplement remplacer:
text.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
PHP échappe que ces quatre entités htmlspecialchars. Notez que si vous avez défini ENT_QUOTES en PHP, vous devez remplacer les guillemets par & # 039; plutôt que & ".
bâtiment sur la réponse de @ de garlon4, vous pouvez définir votre propre htmlspecialchars(s)
:
def htmlspecialchars(text):
return (
text.replace("&", "&").
replace('"', """).
replace("<", "<").
replace(">", ">")
)
Il semble qu'il y ait plus d'une façon évidente de le faire! O noes! –