cgi.escape
в порядке. Это ускользает:
<
до <
>
до >
&
до &
Этого достаточно для всего HTML.
РЕДАКТИРОВАТЬ: Если у вас есть не-ascii символы, которые вы также хотите экранировать, для включения в другой закодированный документ, который использует другую кодировку, например, Крейг говорит, просто используйте:
data.encode('ascii', 'xmlcharrefreplace')
Не забудьте сначала декодировать data
в unicode
, используя любую кодировку, в которую он был закодирован.
Однако, по моему опыту, такая кодировка бесполезна, если вы просто работаете с unicode
все время от начала. Просто закодируйте в конце кодировку, указанную в заголовке документа (utf-8
для максимальной совместимости).
* +1034 * Пример: * * одна тысяча тридцать пять
>>> cgi.escape(u'<a>bá</a>').encode('ascii', 'xmlcharrefreplace')
'<a>bá</a>
Также стоит отметить (спасибо Грэгу) дополнительный параметр cgi.escape
дублей. Если для него установлено значение True
, cgi.escape
также экранирует символы двойных кавычек ("
), поэтому вы можете использовать полученное значение в атрибуте XML / HTML.
РЕДАКТИРОВАТЬ: Обратите внимание, что cgi.escape устарел в Python 3.2 в пользу html.escape
, который делает то же самое, за исключением того, что quote
по умолчанию равно True.