Esiste un equivalente Python per la function PHP htmlspecialchars ()?

Esiste una function simile o equivalente in Python alla function PHP htmlspecialchars ()? La cosa più vicina che ho trovato finora è htmlentitydefs.entitydefs ().

La cosa più vicina che conosco è cgi.escape .

from django.utils.html import escape print escape('<div class="q">Q & A</div>') 

Probabilmente vuoi xml.sax.saxutils.escape :

 from xml.sax.saxutils import escape escape(unsafe, {'"':'&quot;'}) # ENT_COMPAT escape(unsafe, {'"':'&quot;', '\'':'&#039;'}) # ENT_QUOTES escape(unsafe) # ENT_NOQUOTES 

Dai un'occhiata a xml.sax.saxutils.quoteattr , potrebbe essere più utile per te

Il module html.entities ( htmlentitydefs per python 2.x) contiene un dictionary codepoint2name che dovrebbe fare ciò di cui hai bisogno.

 >>> import html.entities >>> html.entities.codepoint2name[ord("&")] 'amp' >>> html.entities.codepoint2name[ord('"')] 'quot' 

Penso che il modo più semplice sia usare solo la sostituzione:

 text.replace("&", "&amp;").replace('"', "&quot;").replace("<", "&lt;").replace(">", "&gt;") 

PHP sfugge solo a quelle quattro entity framework; con htmlspecialchars. Tieni presente che se hai ENT_QUOTES impostato in PHP, devi sostituire le virgolette con & # 039; piuttosto che & quot ;.

Se si utilizza django 1.0, le variables del model saranno già codificate e pronte per la visualizzazione. Usi anche l'operatore safe {{ var|safe }} se non vuoi che venga triggersto globalmente.

Basandosi sulla risposta @ garlon4, puoi definire i tuoi htmlspecialchars(s) :

 def htmlspecialchars(text): return ( text.replace("&", "&amp;"). replace('"', "&quot;"). replace("<", "&lt;"). replace(">", "&gt;") )