首页 文章

rss feed和cdata的问题

提问于
浏览
3

我有一个rss feed的问题 .

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

Headers 很好地出现在Feed中

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

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

Headers 根本没有出现 .


它仍然无法正常工作 . 我动态地生成我的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);

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

Â\x80

More detailed information:

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

  • Feed中的信息存储在latin 1数据库中(我管理)

  • 数据库中存在欧元符号时出现问题 . 无论是喜欢还是 &euro;

  • 欧元符号有时看起来像怪异的字符或类似Â\ x80

  • 我尝试在进纸侧解决问题,而不是在阅读器方面 .

  • 完整的代码可以在这里找到:codedump

  • 下一步:有时当欧元符号无法解析时,该项目( Headers 或说明)显示为空 . 因此,如果您在浏览器中显示Feed时查看源代码,您将找到 <title></title>

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

6 回答

  • 15

    问题是你的输出代码;更改

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

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

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

    相反,做你应该做的事情:在htmlentitites中包装 Headers 并完成,如:

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

    Replace [encoding] with the character encoding you are using. 最有可能的,这是'UTF-8' . 这是必要的,因为php(<6)默认使用ISO-8859-1,并且没有办法表达,例如欧元签到该编码 . 有关详细信息,请参阅well-written introduction .

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

  • 3

    使用 htmlspecialchars() 而不是 htmlentities() .

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

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

  • -1

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

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

    所以你最好写:

    <title><![CDATA[$title]]></title>
    
  • -1

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

  • 1

    我相信RSS Profile不允许它:this文件说明 title 持有,字符数据进一步定义as follows .

  • 0

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

相关问题