Аналог htmlspecialchars в Python

Автор: Igor Kirsanov

В python нет функции под названием htmlspecialchars, но есть ее полный аналог escape в стандартной библиотеке cgi

import cgi
print cgi.escape("<a href='test'>Test</a>", True)

В результате получим
# &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;;

Функция htmlspecialchars не делает ничего особенного, если посмотрим документацию php, то увидим:

  • '&' (ampersand) becomes '&amp;'
  • '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
  • "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set.
  • '<' (less than) becomes '&lt;'
  • '>' (greater than) becomes '&gt;'

всего 5 возможных замен, поэтому можно ничего не импортировать, а использовать свою функцию


def html_special_chars(text):
    return text \
    .replace(u"&", u"&amp;") \
    .replace(u'"', u"&quot;") \
    .replace(u"'", u"&#039;") \
    .replace(u"<", u"&lt;") \
    .replace(u">", u"&gt;")

a = "<a href='test'>Test</a>"
print html_special_chars(a)