Сообщить об ошибке.

Функции escape() и unescape() модуля html в Python

Преобразование символов в безопасные последовательности HTML

Из всего модуля html в данном разделе будут рассмотрены только две функции html.escape и html.unescape используемые для экранирования сущностей HTML.

Из словарей, которые предоставляет подмодуль html.entities будет рассмотрен только часто используемый словарь html.entities.html5


html.escape(s, quote=True):

Функция html.escape() преобразует символы &, < и > в строке s в безопасные последовательности HTML.

Используйте эту функцию, если надо отобразить на HTML странице текст, который может содержать вышеуказанные символы. Это убережет от XXS-атаки - внедрение вредоносного JavaScript-кода.

Если необязательный флаг quote имеет значение True, то также переводятся символы (") и ('). Это поможет включить в HTML-атрибут значение, разделенное кавычками, например как в <a id="...">.

>>> import html
>>> xxs = """<script type = 'text/javascript'>
... alert('This XXS!!!');
... </script>"""
>>> rez = html.escape(xxs)
>>> print(rez)
# &lt;script type = &#x27;text/javascript&#x27;&gt;
# alert(&#x27;This XXS!!!&#x27;);
# &lt;/script&gt;

html.unescape(s):

Функция html.unescape() преобразует все именованные и числовые ссылки на символы (например &gt;, &#62;, &#x3e;) в строке s в соответствующие символы Юникода. Другими словами, эта функция обратная html.escape()

Функция html.unescape() использует правила, определенные стандартом HTML 5 для допустимых и недопустимых ссылок на символы, а также список именованных ссылок на символы HTML 5.

>>> import html
>>> htm = """&lt;script type = &#x27;text/javascript&#x27;&gt;
alert(&#x27;This XXS!!!&#x27;);
&lt;/script&gt;"""
>>> rez = html.unescape(htm)
>>> print(rez)
# <script type = 'text/javascript'>
# alert('This XXS!!!');
# </script>

html.entities.html5:

Атрибут html5 подмодуля html.entities представляет собой словарь, который сопоставляет HTML5 именованные ссылки на символы с эквивалентными символами Unicode. Например html5['gt;'] == '>'.

Обратите внимание, что конечная точка с запятой ';' включена в имя (например, 'gt;'), но некоторые имена принимаются стандартом даже без точки с запятой: в этом случае имя присутствует с символом ';' и без него.

>>> from html.entities import html5
# знак плюс-минус
>>> html5['MinusPlus;']
# '∓'

# знак копирайта
>>> html5['copy;']
# '©'

# знак лямбда
>>> html5['lambda;']
# 'λ'