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

Есть ли аналогичная или эквивалентная функция в 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, {'"':'&quot;'}) # ENT_COMPAT escape(unsafe, {'"':'&quot;', '\'':'&#039;'}) # 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("&", "&amp;").replace('"', "&quot;").replace("<", "&lt;").replace(">", "&gt;") 

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

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

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

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