过滤xml中的非法字符:Fault -32700: 'parse error. not well formed' 错误处理
最近使用Python WordPress XML-RPC模块把采集的文章发布到WordPress,不过发现偶尔会报 Fault -32700: 'parse error. not well formed'
的错误,大部分文章都能正常发布,只有极个别文章发布的时候会报这个错误。
因为WordPress XML-RPC模块是使用xml发布文章的,当文章内容中带有xml中不支持的字符时,也就是xml文件中含有非法字符时,是一个Bad XML,不符合xml规范的。
检查一下报错的文章,发现有字符\x08
,而xml允许的字符范围是 #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
,因此在使用xml时需要把这个范围之外的字符过滤掉,也就是说
\x00-\x08
\x0b-\x0c
\x0e-\x1f
这三组字符是不允许出现在XML中的,解决方法很简单,用正则表达式替换
re.sub("[\x00-\x08\x0b-\x0c\x0e-\x1f]", "", text)