2015-09-21 2 views
0

В одном из моих проектов я использую cgi.escape(), чтобы избежать набора названий, которые я получаю от ресурса. Эти заголовки могут быть от Youtube или где-либо еще, и, возможно, вам нужно будет сбежать.Экранирование символов в Python, но игнорирование уже экранированных символов

Проблема, с которой я сталкиваюсь, заключается в том, что если заголовок уже сбежал с Youtube, и я передаю его в cgi.escape(), я получаю двойные экраны, которые испортили более поздние части моего проекта.

Есть ли библиотека, которая выйдет из строк, но проверьте, не ушла ли часть и игнорирует ее?

+0

https://wiki.python.org/moin/EscapingHtml –

+1

Согласно протоколу HTTP: //webhelpers2.readthedocs .org/ru/latest/modules/html/builder.html, webhelpers2 имеет литеральный класс, тогда как literal.escape() возвращает экземпляры литерала, и если ему дается буквальный вывод, он возвращается без изменений. –

ответ

1

webhelpers2.html.builder.literal представляет собой «строку буква HTML», которая не будет далее экранирована ». Он имеет метод побега для побега HTML и возвращения буквальный и дословный экземпляр может быть преобразован в строку с «» .join (literal_instance)

Например, используя Python 2.7.10:

из webhelpers2.html импорт .builder буквальным

e1 = literal.escape('& < >') 
e1 
Out[3]: literal(u'&amp; &lt; &gt;') 

e2 = literal.escape(e1) 
e2 
Out[5]: literal(u'&amp; &lt; &gt;') 

s = ''.join(e1) 
s 
Out[7]: u'&amp; &lt; &gt;' 

с Python 3.4.3:

from webhelpers2.html.builder import literal 

e1 = literal.escape('& < >') 
e1 
literal('&amp; &lt; &gt;') 

e2 = literal.escape(e1) 
e2 
Out[5]: literal('&amp; &lt; &gt;') 

s = ''.join(e1) 
s 
Out[7]: '&amp; &lt; &gt;' 
+0

Спасибо! Этот ответ был прекрасен – Zach

0

Если вы знаете, что ваш вход уже экранирован, сначала отпустите его. Затем выйдите из него прямо перед тем, где это должно быть.