chromis
chromis

Reputation: 31

How to get rid of weird characters in my RSS feed?

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, "<", "&lt;", "ALL");
        news.body = replace(news.body, "<", "&lt;", "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

Answers (5)

CfSimplicity
CfSimplicity

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

Troy
Troy

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

Keltia
Keltia

Reputation: 14743

Sanitize every input when it is entered in the database, that way should simplify the display of such data afterwards.

Upvotes: 0

rip747
rip747

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>

View XMLFormat livedoc page.

Upvotes: 6

Kornel
Kornel

Reputation: 100170

Your escaping function is too simple. You need to change & to &amp; first.

If you use named entities (i.e. &pound;) that is cause of the error.

Upvotes: 0

Related Questions