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中「禁止」字符的列表?
- 是否有其他人處理這種問題,並作爲一個適當的逃避方法(作爲內置的比我做得更好)?