webp2y XML помощник дезинфицирует разрывы строк под python3 - PullRequest
0 голосов
/ 11 февраля 2020

В моем приложении web2py я обрабатываю список элементов, где пользователь может щелкнуть ссылку для каждого элемента, чтобы выбрать его. Элемент имеет UUID, заголовок и описание. Для лучшей ориентации описание элемента также отображается в виде заголовка ссылки. Чтобы предотвратить инъекции и избежать тегов в описании, я использую дезинфицирующее средство XML следующим образом:

A(this_item.title, \
  callback = URL('item', 'select', \
                 vars=dict(uuid=this_item.uuid), user_signature=True), \
  _title=XML(str_replace(this_item.description, {'\r\n':'&#13;', '<':'&#60;', '>':'&#62;'}), sanitize=True))

При использовании Python 2 все было в порядке. Поскольку я перешел на Python 3, у меня возникла следующая проблема. Когда описание содержит разрывы строк, дезинфицирующее средство больше не работает. Например, следующая строка, созданная моей подпрограммой str_replace, подходит для очистки с помощью помощника XML в Python 2, но не в Python 3:

Header&#13;&#13;Line1&#13;Line2&#13;Line3

Очистка разрывов строк, экранированных &#13; проблема с Python 3 (но не с Python 2). Все остальное не является проблемой для XML помощника для очистки (например, меньше или больше чем, мне это нужно, поскольку, если нет описания, оно генерируется как <no description>).

Как может быть строка разрывы, очищенные помощником XML, работающим с web2py под Python3?

Спасибо за любую поддержку!

С наилучшими пожеланиями, Клеменс

1 Ответ

1 голос
/ 12 февраля 2020

Это связано с изменением класса HTMLParser python между 3.4 и 3.5, где для convert_charrefs по умолчанию установлено значение True: Python 3.4 DeprecationWarning convert_charrefs

Я думаю, что следующее исправление в вашем web2py yatl-источнике должно исправить это: https://github.com/web2py/yatl/compare/master...timnyborg: patch-1

...