Аналог htmlspecialchars в Python

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

import cgi
print cgi.escape("<a href=&#039;test&#039;>Test</a>", True)

В результате получим

# &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;;

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

  • ‘&’ (ampersand) becomes ‘&’
  • ‘"’ (double quote) becomes ‘"’ when ENT_NOQUOTES is not set.
  • “’” (single quote) becomes ‘'’ (or ') only when ENT_QUOTES is set.
  • ‘<’ (less than) becomes ‘<’
  • ‘>’ (greater than) becomes ‘>’

всего 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>"<br />print html_special_chars(a)