python - saxutils.escape() 转义分号两次

标签 python sax

我正在尝试通过 saxutils.escape 方法转义分号。

saxutils.escape('<;', {';': '&#59;'})

我希望它能产生

'&lt;&#59;'

但是它给出了

'&lt&#59;&#59;'

这是设计使然吗?我怎样才能得到我预期的结果?

最佳答案

你的问题是saxutils.escape分两步进行。首先,它解析 < , > ,和& ,然后它使用 entities解析该解析的结果

曾经<已替换为&lt; ,你有&lt;; ,所以你最终得到 &lt&#59;&#59; .

基本上,它所做的事情是有道理的。如果需要转义分号,那不是因为HTML原因,所以一定是双重转义。在这种情况下,转义由 HTML 要求的转义创建的分号是有意义的。

使用 saxutils.escape 无法获得您想要的结果。您需要使用另一种转义方法。请参阅Python Wiki page on escaping HTML一些想法。

您还可以使用类似我对What is the best way to do a find and replace of multiple queries on multiple files?的回答中的内容。将分号同时替换为其他模式,这样就不会重复替换任何内容。

关于python - saxutils.escape() 转义分号两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7063026/

相关文章:

python - Bigquery(和 pandas)- 确保数据插入一致性

python - 使用按位运算将两个整数相加时无限循环?

java - 为什么我的 SaxParser 在解析本地文件时会抛出 ConnectException?

java - 将对象序列化为 XML 并追加 1 天

java - 在 XML 标签之间跳转

python - 使用 __class__ 创建实例

javascript - 如何在 Django ajax 更新中返回 json 字典

python - 在 Python 的测试包中运行单元测试

java - DOM、SAX 和 StAX XML 解析器之间有什么区别?

java - 如何从 XML 文档中删除/删除 DOCTYPE 声明?