2009-05-31 15 views

risposta

0

Se si utilizza django 1.0, le variabili del modello saranno già codificate e pronte per la visualizzazione. Si utilizza anche l'operatore safe{{ var|safe }} se non si desidera che venga attivato globalmente.

12

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

2

Probabilmente vogliono xml.sax.saxutils.escape:

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

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

1

Il modulo html.entities (htmlentitydefs per Python 2.x) contiene un dizionario codepoint2name che dovrebbe fai quello che ti serve.

>>> import html.entities 
>>> html.entities.codepoint2name[ord("&")] 
'amp' 
>>> html.entities.codepoint2name[ord('"')] 
'quot' 
6
from django.utils.html import escape 
print escape('<div class="q">Q & A</div>') 
+1

Sto votando per questo perché non voglio analizzare qualcosa come alcune delle altre risposte, o anche fare una ricerca e sostituire, voglio una singola funzione che fa tutto per me. – paulmorriss

1

Penso che il modo più semplice è utilizzare sostituire:

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

PHP sfugge solo le quattro entità con htmlspecialchars. Nota che se hai ENT_QUOTES impostato in PHP, devi sostituire le virgolette con & # 039; piuttosto che & quot ;.

0

Sulla @ risposta garlon4, è possibile definire il proprio htmlspecialchars(s):

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