Я создал RSS-канал в кодировке utf8, который представляет данные новостей, взятые из базы данных. Я установил все аспекты своей базы данных на utf8, а также сохранил текст, который я поместил в базу данных, как utf8, вставив его в блокнот и сохранив как utf8. Таким образом, все должно быть закодировано в utf8, когда RSS-канал отображается в браузере, однако я все еще получаю странные символы вопросительного знака для знаков фунта :(
Вот мой код RSS-канала (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>
Есть ли у кого-нибудь предложения? Я провел множество исследований, но не могу найти ответов :(
Заранее спасибо,
Хромис





Ваша функция экранирования слишком проста. Сначала вам нужно сменить & на &.
Если вы используете именованные объекты (например, £), это является причиной ошибки.
Избавьтесь от кода экранирования и используйте вместо него 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>
Дезинфицируйте каждый ввод, когда он вводится в базу данных, это должно упростить отображение таких данных впоследствии.
Это сработало для меня, просто объедините в один тег cfcontent и добавьте charset = utf-8.
<cfcontent type = "text/xml; charset=utf-8" reset = "yes" />
Если вы используете Adobe ColdFusion 9 или выше, рассмотрите возможность использования CFFEED с атрибутом escapeChars для создания RSS (CF8 также поддерживает CFFEED, но не этот атрибут).
http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7675.html