RSS Feed&特殊字符

时间:2012-08-02 17:53:28

标签: php xml rss special-characters htmlspecialchars

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

以下是Feed:http://montanafarmersunion.com/rss.php

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

1 个答案:

答案 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(这是你正在使用的?)建议不要使用&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,这表明没有办法让所有读者都感到满意。但是最后一种方法应该得到大部分。