Ответ 1
Ближайшая вещь, о которой я знаю, cgi.escape.
Есть ли аналогичная или эквивалентная функция в Python для функции PHP htmlspecialchars()? Самое близкое, что я нашел до сих пор, это htmlentitydefs.entitydefs().
Ближайшая вещь, о которой я знаю, cgi.escape.
from django.utils.html import escape
print escape('<div class="q">Q & A</div>')
Вероятно, вы хотите xml.sax.saxutils.escape:
from xml.sax.saxutils import escape
escape(unsafe, {'"':'"'}) # ENT_COMPAT
escape(unsafe, {'"':'"', '\'':'''}) # ENT_QUOTES
escape(unsafe) # ENT_NOQUOTES
Посмотрите xml.sax.saxutils.quoteattr, это может быть более полезно для вас
Модуль html.entities
(htmlentitydefs
для python 2.x) содержит словарь codepoint2name
, который должен делать то, что вам нужно.
>>> import html.entities
>>> html.entities.codepoint2name[ord("&")]
'amp'
>>> html.entities.codepoint2name[ord('"')]
'quot'
Я думаю, что самый простой способ - просто заменить:
text.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
PHP только ускользает от этих четырех объектов с помощью htmlspecialchars. Обратите внимание, что если в PHP установлен ENT_QUOTES, вам нужно заменить кавычки на & # 039; а не ".
Если вы используете django 1.0, ваши шаблонные переменные уже будут закодированы и готовы для отображения. Вы также используете оператор safe
{{ var|safe }}
, если вы не хотите, чтобы он был включен глобально.
На основе ответа @garlon4 вы можете определить свой собственный htmlspecialchars(s)
:
def htmlspecialchars(text):
return (
text.replace("&", "&").
replace('"', """).
replace("<", "<").
replace(">", ">")
)