RSS源&;特殊字符


RSS Feed & Special Characters

我已经花了几个小时的时间试图获得rss提要。问题出在特殊字符上。我在网站上列出了一个列表,但我也想要一个rss提要。标题中有"&",它们被写成$amp;。如果我使用htmlspecialchar,它会将其转换为$amp;amp;如果我不这样做,验证器会因为"&"而给出一个错误。我不能写"&",否则html将无法正确显示它。我试着把它放在一个Cdata标签里,但也没用。

以下是提要:http://montanafarmersunion.com/rss.php

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

RSS咨询委员会页面很好地总结了这个问题:

该规范对HTML是否在项目描述以外的元素中允许,导致聚合器处理其他字符数据的方式差异很大元素。这使得出版商特别难以确定如何对字符"&"answers"<"进行编码,这两个字符必须以XML编码。

也就是说,没有"正确"的方法。理论上,您应该可以不使用CDATA标记,然后使用HTML编码标题。例如,这在Firefox中对我有效;IE8:

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

然而,W3RSS验证器(这就是你正在使用的吗?)建议不要使用它,因为&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>';

(注意,我已经将起始字符串设置为空的&

我不得不提到这篇博客文章,这表明并没有一种方法能让所有读者一直快乐。但最后一种方法应该能得到大部分。