Reputation: 31
I've created a utf8 encoded RSS feed which presents news data drawn from a database. I've set all aspects of my database to utf8 and also saved the text which i have put into the database as utf8 by pasting it into notepad and saving as utf8. So everything should be encoded in utf8 when the RSS feed is presented to the browser, however I am still getting the weird question mark characters for pound signs :(
Here is my RSS feed code (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>
Has anyone any suggestions? I've done loads of research but can't find any answers :(
Thanks in advance,
Chromis
Upvotes: 3
Views: 1755
Reputation: 2363
If you are on Adobe ColdFusion 9 or above, consider using CFFEED with the "escapeChars" attribute to create your RSS (CF8 also supports CFFEED, but not that attribute).
http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7675.html
Upvotes: 0
Reputation: 11
This worked for me, simply combine into one cfcontent tag and append charset=utf-8.
<cfcontent type="text/xml; charset=utf-8" reset="yes" />
Upvotes: 1
Reputation: 14743
Sanitize every input when it is entered in the database, that way should simplify the display of such data afterwards.
Upvotes: 0
Reputation: 9455
Get rid of your escaping code and use XMLFormat instead:
<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>
Upvotes: 6
Reputation: 100170
Your escaping function is too simple. You need to change &
to &
first.
If you use named entities (i.e. £
) that is cause of the error.
Upvotes: 0