Como se livrar de caracteres estranhos no meu feed RSS?

votos
3

Eu criei um utf8 codificado feed RSS que apresenta dados de notícias extraídas de um banco de dados. Eu configurei todos os aspectos do meu banco de dados para utf8 e também salvou o texto, que pus no banco de dados como utf8, colando-o no bloco de notas e salvar como UTF-8. Então tudo deve ser codificado em UTF-8 quando o feed RSS é apresentado ao navegador, no entanto ainda estou recebendo os caracteres ponto de interrogação estranho para sinais de libra :(

Aqui está o meu código feed 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, <, &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> 

Alguém tem alguma sugestão? Eu fiz um monte de investigação, mas não podemos encontrar nenhuma respostas :(

Desde já, obrigado,

Chromis

Publicado 12/12/2008 em 11:36
fonte usuário
Em outras línguas...                            


5 respostas

votos
0

Sua função escapar é muito simples. Você precisa mudar &para &amp;primeiro.

Se você usar entidades nomeadas (ie &pound;) que é causa do erro.

Respondeu 12/12/2008 em 13:51
fonte usuário

votos
6

Livrar-se do seu código e uso escapar XMLFormat em vez disso:

<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>

Ver página XMLFormat livedoc.

Respondeu 12/12/2008 em 19:57
fonte usuário

votos
0

Higienizar cada entrada quando ele é inserido no banco de dados, de que maneira deve simplificar a exibição desses dados depois.

Respondeu 15/12/2008 em 10:41
fonte usuário

votos
1

Isso funcionou para mim, basta combinar em uma tag cfcontent e acrescentar charset = utf-8. <cfcontent type="text/xml; charset=utf-8" reset="yes" />

Respondeu 18/07/2012 em 22:22
fonte usuário

votos
0

Se você estiver em Adobe ColdFusion 9 ou acima, considere o uso CFFEED com o atributo "escapeChars" para criar o seu RSS (CF8 também suporta CFFEED, mas não esse atributo).

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7675.html

Respondeu 23/07/2012 em 10:28
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more