今天,想把自己的wordpress rss feed提交到http://www.feedburner.com进行烧录,但是出现了错误”Error on line 2: The processing instruction target matching “[xX][mM][lL]” is not allowed. 另外,在foxfire中输入feed地址,也出现”XML or text declaration not at start of entity”错误;在opera中出现”XML declaration not at beginning of document”错误. 于是开始找解决办法,找到一个feed校验网站 http://feedvalidator.org ,它不但可以找出你feed中的错误,还可以告诉你如何修改. 我这个问题可以从 http://feedvalidator.org/docs/error/WPBlankLine.html 得到答案,是因为生成的feed xml最开始有一空行,而正规的xml是以<?xml开头,这是由于在wordpress的php中在<?php和?>之外有空行,解决的办法就是 检查并删除wp-rss2.php和wp-atom.php文件在<?和?>之外的空行,如果还是有问题,就到第2步 检查并删除wp-config.php文件在<?和?>之外的空行,如果还是有问题,就到第3步 检查并删除你的模板theme中的functions.php文件在<?和 ?>之外的空行,如果还是有问题,就到第4步 一个接一个得关闭你的插件,看问题是否还存在,如果没有问题,就说明刚才关闭的插件有问题,打开它的php文件,并修改,这样应该就可以解决问题. 我试了以上方法,结果要将全部插件全部关闭,然后再一个一个打开,检查是否有问题,最后终于找到一个插件wp-recentcomments有问题,并且将?>后的空行删除也不行,没有办法了,只要将这个不用了,找个wp-kit-cn替代了. 后记:虽然问题解决了,但是这个解决方法实在工作量太大,必须老老实实打开每个php文件检查,修改了又要上传到服务器,激活插件看是否有问题. 要是能够修改生成feed的php代码能够解决此问题就好了,于是找到wp-includes目录下的feed-rss2.php,里面有生成feed的代码,但是很不幸,生成的feed是采用echo方式,也就是采用直接显示的方式,这样就不能够修改feed. 那还有其他方便的方法吗?答案是肯定的,可以做一个插件,在插件中查找你的wordpress目录下面所有的php文件,看头部和尾部是否有空行,如果有则删除,这样就不用那么费力一个一个人工打开文件查找删除了。 2008-12-30 已经开发出这个插件,大家可以到http://www.flyaga.net/wordpress/plugins/fix-rss-feed-error-wordpress-plugins.htm下载此插件。