Экранирование разметки HTML

ekranirovanie razmetki html Сценарии на стороне сервера

Как было показано ранее, cgi.escape преобразует текст, который должен быть включен в разметку HTML. Обычно эта утилита вызывается в сценариях CGI, но несложно исследовать ее действие и интерактивно:

>>> import cgi

>>> cgi.escape(‘a < b > c & d "spam"’, 1)

‘a &lt; b &gt; c &amp; d &quot;spam&quot;’

>>> s = cgi.escape("1<2 <b>hello</b>")

>>> s

‘1&lt;2 &lt;b&gt;hello&lt;/b&gt;’

Модуль cgi автоматически преобразует специальные символы HTML в соответствии с соглашениями HTML. Он преобразует символы <, >, &, а при передаче дополнительного аргумента True также символ ", в экранированные последовательности вида &X;, где X — мнемоника, обозначающая исходный символ. Например, &lt; обозначает оператор «меньше» (<), а &amp; обозначает литерал амперсанда (&).

В модуле cgi отсутствуют инструменты обрат но го преобразования экранированных последовательностей, потому что экранированные последовательности HTML распознаются в контексте анализатора HTML, подобно тому, как это делают веб-броузеры при загрузке страницы. В Python также есть полный анализатор HTML в виде стандартного модуля html.parser. Мы не станем здесь вникать в детали инструментов синтаксического анализа HTML (они описываются в главе 19, вместе с инструментами обработки текста), но чтобы показать, как экранированные последовательности в конечном итоге преобразуются обратно в неэкранированный вид, приведем пример работы модуля анализатора HTML, воспроизводящий последнюю строку в примере выше:

>>> import cgi, html.parser

>>> s = cgi.escape("1<2 <b>hello</b>")

>>> s

‘1&lt;2 &lt;b&gt;hello&lt;/b&gt;’

>>> 

>>> html.parser.HTMLParser().unescape(s)

‘1<2 <b>hello</b>’

Здесь для обратного преобразования используется вспомогательный метод класса, реализующего синтаксический анализ HTML. В главе 19 мы увидим, как использовать этот класс для решения более реальных задач, с созданием подклассов, переопределяющих методы, которые вызываются в процессе анализа при обнаружении тегов, данных, мнемоник и других элементов разметки. Продолжение этой истории и примеры более полноценного синтаксического анализа HTML вы найдете в главе 19.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий