4

我已经工作了好几个小时来尝试获取 RSS 提要。问题在于特殊字符。我在网站上将数据列为列表,但我也想要一个 rss 提要。标题有“&”,写成$amp;。如果我使用 htmlspecialchars 它会将其转换为 $amp;amp; 如果我不这样做,验证器会因为“&”而给出错误。我不能写“&”,否则 html 将无法正确显示。我尝试不理会它并将其放在 Cdata 标记中,但这也不起作用。

这是提要: http: //montanafarmersunion.com/rss.php

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

4

1 回答 1

2

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

该规范没有明确说明是否允许在项目描述以外的元素中使用 HTML,导致聚合器如何处理其他元素中的字符数据存在很大差异。这使得发布者特别难以确定如何对字符“&”和“<”进行编码,这些字符必须以 XML 进行编码。

也就是说,没有“正确”的方法。从理论上讲,您应该能够不使用 CDATA 标记,然后使用 HTML 编码您的标题。例如,这在 Firefox 和 IE8 中适用于我:

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

但是W3 RSS 验证器(这是您正在使用的吗?)建议不要使用它,因为&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>';

(请注意,我已将起始字符串设为裸线&

我也觉得有必要提及这篇博文,这表明没有真正的方法可以让所有读者一直都开心。但最后一种方法应该得到大部分。

于 2012-08-03T01:03:29.560 回答