rss feed和cdata的问题

时间:2009-05-04 10:10:55

标签: php rss

我的rss Feed有问题。

当我做<title>This is a title </title>

标题很好地出现在Feed中

但是当我ddo $ title =“这是一个倾斜”;

<title><![CDATA['$title']]></title>

标题根本没有出现。


它仍然不起作用。我动态地生成了我的RSS Feed,它看起来像这样:

$item_template="
      <item>
         <title>[[title]]</title>
         <link>[[link]]</link>
         <description><![CDATA[[[description]]]]></description>
         <pubDate>[[date]]</pubDate>
      </item>
      ";

并循环:

$s.=str_replace(
array("[[title]]","[[link]]","[[description]]","[[date]]"),
array(htmlentities($row["title"]),$url,$description,$date),
$item_template);

问题特别是当标题有欧元符号时。然后它出现在我的rss验证器中,如:

Â\x80

更详细的信息:

好的,过去几天我一直在努力解决这个问题,但我找不到解决办法。所以我会开始赏金。以下是更多信息:

  • Feed中的信息存储在latin 1数据库(我管理)
  • 当数据库中有欧元符号时,会出现问题。无论是欧元还是&euro;
  • 欧元符号有时看起来像怪异的字符或类似Â\ x80
  • 我尝试在供稿方面解决问题,而不是在读者方面。
  • 完整的代码可以在这里找到:codedump
  • 下一步:有时当欧元符号无法解析时,该项目(标题或说明)显示为空。因此,如果您在浏览器中查看Feed时查看来源,则会找到<title></title>

如果需要更多信息,请询问。

6 个答案:

答案 0 :(得分:15)

问题是输出代码;变化

echo '<title><![CDATA[$title]]></title>';

echo '<title><![CDATA[' . $title . ']]></title>';

作为旁注,请注意以下事项:不要通过跟进回答您自己的问题,而是编辑原始问题。没有充分理由不要使用正则表达式。不要猜。

相反,做你应该做的事情:在htmlentitites中包裹标题并完成,如:

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>';

[encoding]替换为您正在使用的字符编码。最有可能的是,这是'UTF-8'。这是必要的,因为php(&lt; 6)默认使用ISO-8859-1并且没有办法表达,例如欧元签到该编码。有关详细信息,请参阅此well-written introduction

我也建议你read about XML。从第二章开始。

答案 1 :(得分:3)

使用htmlspecialchars()代替htmlentities()

RSS / ATOM Feed 不是 HTML,因此您无法在其中使用HTML实体。 XML has only five entities defined by default,因此您无法使用&euro;。由于您使用的是UTF - 使用文字欧元符号,无需转换(无htmlentities),但可以转义其他敏感字符(htmlspecialchars)。

这将是完全有效的RSS / XML。如果这不能解决问题,那就意味着它位于其他地方(请为我提供生成RSS的原始资源以获得更多帮助)。

答案 2 :(得分:1)

您使用哪种编程语言或环境?例如,在PHP中,单引号会阻止评估内部的变量。

否则,在这种情况下,您实际上并不需要这些引号。可能是你对PHP的数组语法感到困惑。

所以你最好写一下:

<title><![CDATA[$title]]></title>

答案 3 :(得分:0)

我不明白你为什么要使用编码功能。当第三方获取您的内容时,将不知道如何解码该字符串。我觉得 - 您应该将CDATA用于可能破坏XML的标签 - 使用定义良好的库来编写XML。对于PHP:DomDocument或XML Writer(http://php.net/manual/en/book.xmlwriter.php)

答案 4 :(得分:-1)

我相信RSS个人资料不允许:this文件说明title成立,字符数据进一步定义as follows

答案 5 :(得分:-1)

This article可能有助于获取有关各种情况下欧元符号和支持的信息。该文章中的一些建议包括使用&#8364;&euro;或仅使用“欧元”一词替换标志。祝你好运!