Czy istnieje podobna lub równoważna funkcja w Pythonie do funkcji PHP htmlspecialchars()? Najbliższą rzeczą, jaką znalazłem do tej pory, jest htmlentitydefs.entitydefs().Czy istnieje odpowiednik Pythona do funkcji PHP htmlspecialchars()?
Odpowiedz
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.
Najbliższa rzecz, o której wiem, to cgi.escape.
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
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'
from django.utils.html import escape
print escape('<div class="q">Q & A</div>')
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
Myślę, że najprostszym sposobem jest po prostu użyć wymienić:
text.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
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 ;.
Opierając się na @ garlon4 odpowiedź można definiować własne htmlspecialchars(s)
:
def htmlspecialchars(text):
return (
text.replace("&", "&").
replace('"', """).
replace("<", "<").
replace(">", ">")
)
Wydaje się, że istnieje więcej niż jeden oczywisty sposób to zrobić! O noes! –