我创建了一个utf8编码的RSS源,它提供从数据库中提取的新闻数据。我已经将我的数据库的所有方面设置为utf8,并通过将其粘贴到记事本并保存为utf8来保存我作为utf8放入数据库的文本。因此,当RSS提要呈现给浏览器时,所有内容都应该以utf8编码,但是我仍然得到英镑符号的奇怪问号:(
这是我的RSS Feed代码(CFML):
<cfsilent>
<!--- Get News --->
<cfinvoke component="com.news" method="getAll" dsn="#Request.App.dsn#" returnvariable="news" />
</cfsilent>
<!--- If we have news items --->
cfif news.RecordCount GT 0>
<!--- Serve RSS content-type --->
<cfcontent type="application/rss+xml">
<!--- Output feed --->
<cfcontent reset="true"><?xml version="1.0" encoding="utf-8"?>
<cfoutput>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>News RSS Feed</title>
<link>#Application.siteRoot#</link>
<description>Welcome to the News RSS Feed</description>
<lastBuildDate>Wed, 19 Nov 2008 09:05:00 GMT</lastBuildDate>
<language>en-uk</language>
<atom:link href="#Application.siteRoot#news/rss/index.cfm" rel="self" type="application/rss+xml" />
<cfloop query="news">
<!--- Make data xml compliant --->
<cfscript>
news.headline = replace(news.headline, "<", "<", "ALL");
news.body = replace(news.body, "<", "<", "ALL");
news.date = dateformat(news.date, "ddd, dd mmm yyyy");
news.time = timeformat(news.time, "HH:mm:ss") & " GMT";
</cfscript>
<item>
<title>#news.headline#</title>
<link>#Application.siteRoot#news/index.cfm?id=#news.id#</link>
<guid>#Application.siteRoot#news/index.cfm?id=#news.id#</guid>
<pubDate>#news.date# #news.time#</pubDate>
<description>#news.body#</description>
</item>
</cfloop>
</channel>
</rss>
</cfoutput>
<cfelse>
<!--- If we have no news items, relocate to news page --->
<cflocation url="../news/index.cfm" addtoken="no">
</cfif>
有人有什么建议吗?我做了很多研究,却找不到任何答案:(
提前致谢,
Chromis
答案 0 :(得分:6)
删除转义代码并改为使用XMLFormat:
<item>
<title>#XMLFormat(news.headline)#</title>
<link>#Application.siteRoot#news/index.cfm?id=#XMLFormat(news.id)#</link>
<guid>#Application.siteRoot#news/index.cfm?id=#XMLFormat(news.id)#</guid>
<pubDate>#XMLFormat(news.date)# #XMLFormat(news.time)#</pubDate>
<description>#XMLFormat(news.body)#</description>
</item>
答案 1 :(得分:1)
这对我有用,只需组合成一个cfcontent标记并附加charset = utf-8。
<cfcontent type="text/xml; charset=utf-8" reset="yes" />
答案 2 :(得分:0)
您的逃避功能太简单了。您需要先将&
更改为&
。
如果使用导致错误的命名实体(即£
)。
答案 3 :(得分:0)
在输入数据库时清理每个输入,这样就可以简化之后显示的数据。
答案 4 :(得分:0)
如果您使用的是Adobe ColdFusion 9或更高版本,请考虑使用带有“escapeChars”属性的CFFEED来创建RSS(CF8也支持CFFEED,但不支持该属性)。
http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7675.html