php – RSS Feed和特殊字符

我一直在努力争取获得RSS饲料.问题在于特殊字符.我将数据列为网站上的列表,但我也想要一个RSS提要.标题有“&”写的是$amp;.如果我使用htmlspecialchars它将它转换为$amp; amp;如果我没有验证器因“&”而给出错误.我不能写“&”或者html无法正确显示.我试着不管它,把它放在一个Cdata标签,但这也不起作用.

这是饲料:http://montanafarmersunion.com/rss.php

这是同一个列表的html:http://montanafarmersunion.com/?hd=news&id=news

最佳答案
RSS Advisory Board page很好地总结了这个问题:

The specification has lacked clarity regarding whether HTML is
permitted in elements other than an item’s description, leading to
wide variance in how aggregators treat character data in other
elements. This makes it especially difficult for a publisher to
determine how to encode the characters “&” and “<“, which must be
encoded in XML.

也就是说,没有“正确”的方式.从理论上讲,你应该能够不使用CDATA标签,然后对你的标题进行HTML编码.例如,这适用于我在Firefox& IE8:

$title = 'August 1st: MFU President &amp; friends on farm bill';
echo '<title>'.trim($title).'</title>';

然而W3 RSS validator(这是你正在使用的吗?)因为& amp;而基于上面链接的页面推荐它.他们建议使用十六进制字符引用,但仅限于&和<.实现这个的最简单方法可能是一个简单的str_replace:

$title = 'August 1st: MFU President & friends on farm bill';
$title = str_replace(array('&', '<'), array('&#x26;', '&#x3C;'), $title);
echo '<title>'.trim($title).'</title>';

(注意我已经使起始字符串变为裸&)

我也不得不提到this blog post,这表明没有办法让所有读者都满意.但最后一种方法应该得到大部分.

点赞