2012-08-02 98 views
3

我一直在努力工作几个小时,试图获得一个rss提要。问题在于特殊字符。我有数据列在网站上的列表,但我也想要一个RSS饲料。标题有“&”,写成$ amp ;.如果我使用htmlspecialchars它将它转换为$ amp; amp;如果我不验证者因“&”而给出错误。我不能写“&”,否则html将无法正确显示。我试图让它独自放在一个Cdata标签中,但这也不起作用。RSS提要和特殊字符

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

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

+0

向我们显示您的代码。没有看到你尝试过的东西,我们不禁感慨。 – 2012-08-02 17:55:58

+0

这里是提问'<![CDATA ['.trim(htmlspecialchars($ art [1],ENT_NOQUOTES,'UTF-8'))''。 ]]>'艺术[1]是一个阵列,文字是这样的'8月1日:MFU农业法案主席' – Elliott 2012-08-02 19:04:41

回答

2

RSS Advisory Board page总结了问题相当漂亮:

该规范一直缺乏关于是否清晰在项目说明以外的元素中允许HTML为 ,导致聚合器在其他方式中处理字符数据的方式差异很大 元素。这使得发布者 确定如何编码字符“&”和“<”(其必须是以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为好,这表明有ISN这并不是一种让所有读者始终都快乐的方式。但最后的方法应该得到他们中的大部分。