Инструменты Python для экранирования HTML и URL

instrumenty python dlya ekranirovaniya html i url Сценарии на стороне сервера

Вероятно, в вашей памяти, как и в моей, не запечатлелось шестнадцатеричное значение кода ASCII для символа & (впрочем, в этом вам может помочь вызов hex(ord(c))). К счастью, в языке Python имеются инструменты автоматического экранирования адресов URL, подобные функции cgi.escape, используемой для экранирования разметки HTML. Главное, о чем нужно помнить, — это то, что код разметки HTML и строки URL имеют совершенно разный синтаксис и потому для них используются различные соглашения по экранированию. Пользователям Веб это обычно безразлично, если только им не потребуется ввести сложный адрес URL в явном виде — внутренняя реализация броузеров обычно предусматривает все, что необходимо для экранирования. Но если вы пишете сценарии, которые должны генерировать разметку HTML или адреса URL, нужно следить за экранированием символов, имеющих специальное значение.

Поскольку для HTML и URL используется разный синтаксис, в языке Python имеются два разных набора инструментов их экранирования. В стандартной библиотеке Python:

     cgi.escape экранирует текст, который должен быть вставлен в разметку HTML

     urllib.parse.quote и quote_plus экранируют текст, который должен быть вставлен в адреса URL

В модуле urllib.parse есть также инструменты для обратного преобразования экранированных адресов URL (unquote, unquote_plus), но экранированная разметка HTML обычно не преобразуется обратно во время синтаксического анализа HTML (например, с помощью модуля html. parser). Чтобы проиллюстрировать действия этих двух соглашений по экранированию и инструментам, применим каждый из этих инструментов к нескольким простым примерам.

По совершенно необъяснимым причинам разработчики Python решили в версии 3.2 переместить функцию cgi.escape, широко используемую в этой книге, в другой модуль и переименовать ее в html. escape, объявить прежнюю функцию нерекомендуемой к использованию и несколько изменить ее поведение. И это несмотря на тот факт, что эта функция используется уже целую вечность, практически во всех CGI-сценариях на языке Python: яркий пример, когда понятия об эстетике, сложившиеся в маленькой группе лиц, наносят удар по распространенной практике в 3.X и нарушают работоспособность уже имеющегося программного кода. В будущих версиях Python вам может потребоваться использовать новую функцию html.escape — в том случае если пользователи Python не выскажут достаточно громких претензий (да, это намек!).

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

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

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