Есть ли в Python эквивалент функции PHP htmlspecialchars ()? - PullRequest
14 голосов
/ 31 мая 2009

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

Ответы [ 7 ]

12 голосов
/ 31 мая 2009

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

6 голосов
/ 25 марта 2010
from django.utils.html import escape
print escape('<div class="q">Q & A</div>')
3 голосов
/ 31 мая 2009

Вы, вероятно, хотите 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 , это может быть более полезным для вас

1 голос
/ 30 марта 2011

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

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

PHP экранирует только эти четыре объекта с помощью htmlspecialchars. Обратите внимание, что если вы установили ENT_QUOTES в PHP, вам нужно заменить кавычки на «вместо».

1 голос
/ 31 мая 2009

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

>>> import html.entities
>>> html.entities.codepoint2name[ord("&")]
'amp'
>>> html.entities.codepoint2name[ord('"')]
'quot'
0 голосов
/ 01 марта 2016

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

def htmlspecialchars(text):
    return (
        text.replace("&", "&amp;").
        replace('"', "&quot;").
        replace("<", "&lt;").
        replace(">", "&gt;")
    )
0 голосов
/ 31 мая 2009

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

...