我一直在尝试获取RSS订阅源数小时。问题在于特殊字符。我将数据列为网站上的列表,但我也想要一个RSS提要。标题有“&”写的是$ amp;。如果我使用htmlspecialchars它将它转换为$ amp; amp;如果我没有验证器因“&”而给出错误。我不能写“&”或者html无法正确显示。我试着不管它,把它放在一个Cdata标签中,但这也不起作用。
以下是Feed:http://montanafarmersunion.com/rss.php
以下是同一列表的html:http://montanafarmersunion.com/?hd=news&id=news
答案 0 :(得分:2)
RSS Advisory Board page很好地总结了问题:
规范是否缺乏关于HTML是否清晰的说明 允许在项目描述以外的元素中导致 聚合器如何处理其他字符数据的差异很大 元素。这使得发布商特别难以 确定如何编码字符“&”和“<”,必须是 用XML编码。
也就是说,没有“正确”的方式。从理论上讲,你应该能够不使用CDATA标签,然后对你的标题进行HTML编码。例如,这适用于我在Firefox& IE8:
$title = 'August 1st: MFU President & friends on farm bill';
echo '<title>'.trim($title).'</title>';
然而,基于上面链接的页面,W3 RSS validator(这是你正在使用的?)建议不要使用&
。他们建议使用十六进制字符引用,但仅适用于&
和<
。实现这一目标的最简单方法可能是简单的str_replace
:
$title = 'August 1st: MFU President & friends on farm bill';
$title = str_replace(array('&', '<'), array('&', '<'), $title);
echo '<title>'.trim($title).'</title>';
(注意我已经将起始字符串设为裸&
)
我也不得不提到this blog post,这表明没有办法让所有读者都感到满意。但是最后一种方法应该得到大部分。