2009-05-31 8 views

Odpowiedz

0

Jeśli używasz django 1.0, to twoje zmienne szablonowe będą już zakodowane i gotowe do wyświetlenia. Korzystasz także z operatora safe, jeśli nie chcesz, aby był on włączony globalnie.

2

Prawdopodobnie chcesz xml.sax.saxutils.escape:

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

Wystarczy popatrzeć na xml.sax.saxutils.quoteattr, to może być bardziej przydatne dla Ciebie

1

Moduł html.entities (htmlentitydefs dla Pythona 2.x) zawiera słownik codepoint2name który powinien rób, co potrzebujesz.

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

Głosuję za tym, ponieważ nie chcę parsować niczego, jak niektóre inne odpowiedzi, a nawet wyszukiwać i zamieniać, chcę mieć jedną funkcję, która zrobi to wszystko dla mnie. – paulmorriss

1

Myślę, że najprostszym sposobem jest po prostu użyć wymienić:

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

PHP ucieka tylko te cztery podmioty z htmlspecialchars. Zauważ, że jeśli ustawiłeś ENT_QUOTES w PHP, musisz zamienić cudzysłów na & # 039; zamiast & quot ;.

0

Opierając się na @ garlon4 odpowiedź można definiować własne htmlspecialchars(s):

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