最近使用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)

标签: python, WordPress

添加新评论