rss feed和cdata的问题

san*_*ers 3 php rss

我有一个rss feed的问题.

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

标题很好地出现在Feed中

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

<title><![CDATA['$title']]></title>
Run Code Online (Sandbox Code Playgroud)

标题根本没有出现.


它仍然无法正常工作.我动态地生成我的RSS Feed,它看起来像这样:

$item_template="
      <item>
         <title>[[title]]</title>
         <link>[[link]]</link>
         <description><![CDATA[[[description]]]]></description>
         <pubDate>[[date]]</pubDate>
      </item>
      ";
Run Code Online (Sandbox Code Playgroud)

并在循环中:

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

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

Â\x80
Run Code Online (Sandbox Code Playgroud)

更详细的信息:

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

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

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

phi*_*hag 15

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

echo '<title><![CDATA[$title]]></title>';
Run Code Online (Sandbox Code Playgroud)

echo '<title><![CDATA[' . $title . ']]></title>';
Run Code Online (Sandbox Code Playgroud)

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

相反,做你应该做的事情:把标题包起来htmlentitites并完成,如:

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>';
Run Code Online (Sandbox Code Playgroud)

替换[encoding]为您正在使用的字符编码.最有可能的是,这是'UTF-8'.这是必要的,因为php(<6)默认使用ISO-8859-1,并且无法表示例如该编码中的欧元符号.有关详细信息,请参阅此精心编写的介绍.

我还建议你阅读有关XML的内容.从第二章开始.