RSS 顾问委员会页面很好地总结了这个问题:
该规范没有明确说明是否允许在项目描述以外的元素中使用 HTML,导致聚合器如何处理其他元素中的字符数据存在很大差异。这使得发布者特别难以确定如何对字符“&”和“<”进行编码,这些字符必须以 XML 进行编码。
也就是说,没有“正确”的方法。从理论上讲,您应该能够不使用 CDATA 标记,然后使用 HTML 编码您的标题。例如,这在 Firefox 和 IE8 中适用于我:
$title = 'August 1st: MFU President & friends on farm bill';
echo '<title>'.trim($title).'</title>';
但是W3 RSS 验证器(这是您正在使用的吗?)建议不要使用它,因为&
基于上面链接的页面。他们建议使用十六进制字符引用,但仅限于&
和<
。实现这一点的最简单方法可能很简单str_replace
:
$title = 'August 1st: MFU President & friends on farm bill';
$title = str_replace(array('&', '<'), array('&', '<'), $title);
echo '<title>'.trim($title).'</title>';
(请注意,我已将起始字符串设为裸线&
)
我也觉得有必要提及这篇博文,这表明没有真正的方法可以让所有读者一直都开心。但最后一种方法应该得到大部分。