Выйдите из специальных символов HTML в Python

У меня есть строка где специальные символы как ' или " или & (...) может появиться. В строке:

string = """ Hello "XYZ" this 'is' a test & so on """

как может я автоматически выходить из каждого специального символа, так, чтобы я получил это:

string = " Hello "XYZ" this 'is' a test & so on "
21
задан Martin Thoma 26 September 2017 в 09:55
поделиться

3 ответа

В Python 3.2 вы можете использовать функцию HTML.escape , например,

>>> string = """ Hello "XYZ" this 'is' a test & so on """
>>> import html
>>> html.escape(string)
' Hello "XYZ" this 'is' a test & so on '

Для более ранних версий Python Check http://wiki.python.org/moin/escapinghtml :

Модуль CGI , который поставляется с Python, имеет Escape () функция :

 Импорт CGI

s = cgi.escape ("" "& <>" "") # S = "& <>"
 

Однако он не избегает персонажей помимо и , < и > . Если он используется как CGI.ESCAPE (string_to_escape, quote = true) , он также выходит .


Вот небольшой фрагмент, который позволит вам выпустить цитаты и апострофы :

  HTML_ESCAPE_TABLE = {
  "&": "&",
  ««: »« »,
  ««: «»,
  ">": ">",
  "<": "<",
  }

  def html_escape (текст):
  "" "Производить объекты внутри текста". "" ""
  Возвращение "" .join (html_escape_table.get (c, c) для c в тексте)
 

Вы также можете использовать escape () из XML.Sax.saxutils , чтобы избежать HTML. Эта функция должна выполняться быстрее. Функция Unescape () функция одного и того же модуля может быть передана те же аргументы для декодирования строки.

 От XML.Sax.saxutils Импорт Escape, Unescape
 # Escape () и unescape () заботятся о &, <и>.
html_escape_table = {
  ««: »« »,
  ««: «»
 }
html_unescape_table = {v: k для k, v в html_escape_table.items ()}

def html_escape (текст):
  Возврат Escape (текст, HTML_ESCAPE_TABLE)

def html_unescape (текст):
  Вернуть uneScape (текст, html_unescape_table)
 
38
ответ дан 29 November 2019 в 20:12
поделиться

Простая строковая функция сделает это:

def escape(t):
    """HTML-escape the text in `t`."""
    return (t
        .replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
        .replace("'", "&#39;").replace('"', "&quot;")
        )

Другие ответы в этой теме имеют незначительные проблемы: метод CGI.ESCape по какой-то причине игнорирует односмысленные кавычки, и вам нужно явно спросить его делать двойные цитаты. Связанная страница Wiki делает все пять, но использует объект XML , который не является HTML-объектом.

Эта функция кода все время делает все пять, используя HTML-стандартные объекты.

4
ответ дан 29 November 2019 в 20:12
поделиться

Метод CGI.ESCape метод преобразует специальные буквениры для действительных тегов HTML

 import cgi
 original_string = 'Hello "XYZ" this \'is\' a test & so on '
 escaped_string = cgi.escape(original_string, True)
 print original_string
 print escaped_string

, приведут к

Hello "XYZ" this 'is' a test & so on 
Hello &quot;XYZ&quot; this 'is' a test &amp; so on 

необязательному второму недвижимости на CGI.ESCape скинуть кавычки. По умолчанию они не сбежались

5
ответ дан 29 November 2019 в 20:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: