Есть ли эквивалент Python функции PHP htmlspecialchars()?

Есть ли аналогичная или эквивалентная функция в Python для функции PHP htmlspecialchars()? Самое близкое, что я нашел до сих пор, это htmlentitydefs.entitydefs().

Ответы

Ответ 1

Ближайшая вещь, о которой я знаю, cgi.escape.

Ответ 2

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

Ответ 3

Вероятно, вы хотите 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

Посмотрите xml.sax.saxutils.quoteattr, это может быть более полезно для вас

Ответ 4

Модуль html.entities (htmlentitydefs для python 2.x) содержит словарь codepoint2name, который должен делать то, что вам нужно.

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

Ответ 5

Я думаю, что самый простой способ - просто заменить:

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

PHP только ускользает от этих четырех объектов с помощью htmlspecialchars. Обратите внимание, что если в PHP установлен ENT_QUOTES, вам нужно заменить кавычки на & # 039; а не ".

Ответ 6

Если вы используете django 1.0, ваши шаблонные переменные уже будут закодированы и готовы для отображения. Вы также используете оператор safe {{ var|safe }}, если вы не хотите, чтобы он был включен глобально.

Ответ 7

На основе ответа @garlon4 вы можете определить свой собственный htmlspecialchars(s):

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