Я использую BeautifulSoup для экранирования всех тегов HTML (за исключением набора предварительно утвержденных тегов, таких как a) из произвольного набора текста.Однако я хочу, чтобы теги экранировались только в том случае, если они являются действительными тегами HTML.Если что-то выглядит как тег, но это не так, в итоге добавляется некоторый HTML-код для его закрытия, чего я не хочу.
Пример: если кто-то вводит текст <integer>
, мой кодзаканчивается выплевыванием <integer></integer>
вместо <integer>
Вот код (value
- строка HTML, а VALID_TAGS
- просто список допустимых имен тегов).
soup = BeautifulSoup.BeautifulSoup(
value, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
# Loop through all the tags. If it is invalid, escape the characters.
for tag in soup.findAll():
if tag.name not in VALID_TAGS:
tag.replaceWith(cgi.escape(str(tag)))
return soup.renderContents()
Заранее спасибо.