WordPress自定义RSS报错:XML声明仅允许出现在文档开头
解决WordPress自定义RSS Feed的XML声明错误
嘿,这个错误我之前帮不少人排查过,本质就是你的RSS输出的XML文档最开头多了不该有的内容,导致XML声明(就是<?xml version="1.0"?>这类语句)没排在第一行第一列的位置。结合WordPress自定义Feed的场景,常见原因有这几个:
- PHP文件的空白字符问题:你用来添加自定义Feed的PHP文件(比如主题的
functions.php或者单独的自定义插件文件),在<?php标签前面有空格、换行,或者文件末尾的?>标签后面有多余的换行/空格。其实WordPress社区一直推荐去掉PHP文件末尾的?>标签,因为它之后的空白会被直接输出到页面,刚好就跑到XML声明前面了。 - 其他主题/插件的提前输出:有些主题或者第三方插件会在页面加载早期就输出内容——比如调试信息、不小心遗留的空格,甚至是隐藏的错误提示——这些内容会先于你的自定义Feed的XML声明被输出,直接破坏了XML的结构要求。
- 文件编码的BOM问题:如果你的PHP文件是用带BOM的UTF-8编码保存的,编辑器会在文件开头偷偷加一个看不见的BOM字符,这个字符会被当作输出内容,导致XML声明被迫往后排。你需要用编辑器把文件改成无BOM的UTF-8编码重新保存。
- 自定义Feed代码里的提前输出:检查你从教程复制的代码,有没有在输出XML声明之前就用
echo、print或者其他函数输出了内容,甚至是不小心在PHP代码块外面打了个空格。
排查小技巧:直接访问你的自定义Feed URL,然后查看页面源代码的最开头,看看是不是有空格、换行或者其他奇怪的字符出现在<?xml之前——一眼就能找到问题所在。
内容的提问来源于stack exchange,提问作者FiNaR
相关产品推荐
相关产品推荐

