我有一个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数据库中(我管理)
-
数据库中存在欧元符号时出现问题 . 无论是喜欢还是
€
-
欧元符号有时看起来像怪异的字符或类似Â\ x80
-
我尝试在进纸侧解决问题,而不是在阅读器方面 .
-
完整的代码可以在这里找到:codedump
-
下一步:有时当欧元符号无法解析时,该项目( Headers 或说明)显示为空 . 因此,如果您在浏览器中显示Feed时查看源代码,您将找到
<title></title>
如果需要更多信息,请询问 .
6 回答
问题是你的输出代码;更改
至
作为附注,请注意以下事项:不要通过后续回答您自己的问题,而是编辑原始问题 . 没有充分理由不要使用正则表达式 . 不要猜 .
相反,做你应该做的事情:在htmlentitites中包装 Headers 并完成,如:
Replace [encoding] with the character encoding you are using. 最有可能的,这是'UTF-8' . 这是必要的,因为php(<6)默认使用ISO-8859-1,并且没有办法表达,例如欧元签到该编码 . 有关详细信息,请参阅well-written introduction .
我也建议你read about XML . 从第二章开始 .
使用
htmlspecialchars()
而不是htmlentities()
.RSS / ATOM提供 are not HTML,因此您无法在其中使用HTML实体 . XML has only five entities defined by default,所以你不能使用
€
. 由于您使用的是UTF - 使用文字欧元符号,无需转换(无htmlentities
),但可以转义其他敏感字符(htmlspecialchars
) .这将是完全有效的RSS / XML . 如果这不能解决问题,那就意味着它位于其他地方(请向我提供生成RSS的原始资源以获得更多帮助) .
您使用哪种编程语言或环境?例如,在PHP中,单引号会阻止评估内部变量 .
否则,在这种情况下,您实际上并不需要这些引号 . 可能是你对PHP的数组语法感到困惑 .
所以你最好写:
我不明白你为什么要使用编码功能 . 当第三方获取您的内容时,将不知道如何解码该字符串 . 我认为 - 你应该将CDATA用于可能破坏XML的标签 - 使用定义良好的库来编写XML . 对于PHP:DomDocument或XML Writer(http://php.net/manual/en/book.xmlwriter.php)
我相信RSS Profile不允许它:this文件说明
title
持有,字符数据进一步定义as follows .This article可能有助于获得有关各种情况下欧元符号和支持的信息 . 该文章中的一些建议包括使用
€
或€
或只是用"euro."替换标志祝你好运!