今天 Dreamcolor 告诉我火星在 WordPress Dashboard 后台不更新了。我到火星页面看了下,都有更新啊。然后查看了下生成的聚合 Feed,发现只显示前面两条,感觉应该是聚合的 Feed 中出现了特殊字符的问题,然后去验证下 Feed,发现真的是特殊字符的问题。
火星聚合的 Feed 中每个 item 的 title 是采用“博客的名字 : 标题”这样的形式,以便能够在 WordPress Dashboard 后台正确显示。仔细查了下,这问题就出在其中有的博客名字中有特殊字符。这个博客是:成为查理·唐,它中的那一点(·)被转义成 ·。由于 middot 没有在 XML 预先定义,所以就会出现这样的错误:Undefined named entity: middot
。可以有两种没法处理这个问题,Feed Validator 推荐的方法是创建一个 DTD 文件预先定义它。我选择的另外的方法是使用函数 html_entity_decode
把特殊字符转换回去。代码如下:
html_entity_decode($title,ENT_COMPAT,'UTF-8');