1
我有一个XML导出器,它从我的数据库创建提要,并且我有一个转义方法,以便我的数据的XML敏感字符不会与XML标记冲突。XML转义字符 x03
这种方法看起来像这样:
def escape(m_str):
m_str = m_str.replace("&", "&")
m_str = m_str.replace("\n", "<br />")
m_str = m_str.replace("<", "<")
m_str = m_str.replace(">", ">")
m_str = m_str.replace("\"", """)
return m_str
我使用LXML库这个剧本,我有以下问题:
其中描述的含有\x03
(不要问我为什么在描述中有这个角色,但是我们有这个角色)。
为了更直观的人来说,这里是有问题的说明的样本:
to_be_escaped
> 'gnebst G'
[(x,ord(x)) for x in to_be_escaped]
> <class 'list'>: [('g', 103), ('\x03', 3), ('n', 110), ('e', 101), ('b', 98), ('s', 115), ('t', 116), (' ', 32), ('G', 71)]
你可以看到第一个“空间”是不是一个真正的空间,但一个End of text
字符(ref),第二个是“正常的空间”(十进制32,ref)
的问题是,lxml的严正很糟糕吧,这里是代码:
description = et.fromstring("<volltext>%s</volltext>" % cls.escape(job.description))
其输出(这个角色):
PCDATA无效字符值3,第1行
我的问题是:
- 当然,我可以延长我的逃跑方法解决问题,但保证我不会与另一个角色发生?
- 我在哪里可以找到LXML中“禁止”字符的列表?
- 是否有其他人处理这种问题,并作为一个适当的逃避方法(作为内置的比我做得更好)?