目录
问题
我们如果想要将 HTML 实体以及 XML 实体内容替换成相对应的文本内容,怎么做?
解决方案
python
s = "Elements are written as '<tag>txt</tag>'."
import html
print(html.escape(s))
print("-"*20, "Disable escaping of quotes", "-"*20)
print(html.escape(s, quote=False))
结果为
python
Elements are written as '<tag>txt</tag>'.
-------------------- Disable escaping of quotes --------------------
Elements are written as '<tag>txt</tag>'.
其中,解析出的各结果解释如下:
'
代表 "<
代表 <>
代表 >
在第二个输出中,因为我们在 html.escape()
函数中添加参数 quote=False
,所以在结果中并不会解析 "
引号~
如果要生成 ASCII 文本,并且想针对非 ASCII 字符将其对应的字符编码实体嵌入到文本中,可以在各种同 I/O 相关的函数中使用 errors='xmlcharrefreplace'
参数来实现。
python
s = "Spicy Jalapeño"
print(s.encode("ascii", errors="xmlcharrefreplace"))
结果:
python
b'Spicy Jalapeño'
如果由于某种原因在得到的文本中带有一些实体,而我们又想要得到其内容,可以利用 HTML 以及 XML 解析器自带的功能函数和方法来完成。
python
s = "Spicy "Jalapeño""
import html
print(html.unescape(s))
t = "The prompt is >>>"
from xml.sax.saxutils import unescape
print(unescape(t))
结果
python
Spicy "Jalapeño"
The prompt is >>>
讨论
在生成 HTML 或 XML 文档时,适当的对特殊字符做转义处理推荐使用如 html.escape()
这样的函数。
而如果要反过来,即将 HTML 或 XML 实体转换成对应的字符,推荐使用像 html.unescape()
或 xml.sax.saxutils.unescape()
这样的函数。