PHP 生成 RSS XML - 编码错误

Posted

技术标签:

【中文标题】PHP 生成 RSS XML - 编码错误【英文标题】:PHP Generate RSS XML - Encoding Error 【发布时间】:2011-09-18 23:32:52 【问题描述】:

所以我有一个小的 php 脚本,可以为我的博客的 rss 提要生成一种 xml 感觉。但是,它抛出了这个错误:

此页面包含以下错误:

第 23 行第 14 列的错误:编码错误 下面是出现第一个错误之前的页面渲染。

(见此处:http://aviatex14.co.uk/rss.xml)

这是生成它的代码:

while ($line = mysql_fetch_array($result)) 
  $return[] = $line;
  var_dump(date("Y-m-d H:i:s", $line['timestamp']));


$now = date("D, d M Y H:i:s T");

$output = "<?xml version=\"1.0\" encoding=\"UTF-16\" ?>
             <rss version=\"2.0\">
                <channel>
                  <title></title>
                  <link></link>
                  <description></description>
                  <pubDate></pubDate>
                  <language>en-us</language>
                    
                  <lastBuildDate>$now</lastBuildDate>
          ";
            
foreach ($return as $line) 
  $output .= "<item><title>".htmlentities($line['title'])."</title>
                <link>http://blog.aviatex14.co.uk/permalink.php?uid=".htmlentities($line['uid'])."</link>     
                <description>".htmlentities(strip_tags($line['entry']))."</description>
                <pubDate>".$date = date("Y-m-d H:i:s T", $line['timestamp'])."</pubDate> 
              </item>";

$output .= "</channel></rss>";
print "Content-Type: application/rss+xml";
echo $output;

$f = fopen("rss.xml", "w"); 
fwrite($f, $output); 
fclose($f); 

任何帮助将不胜感激! :D

【问题讨论】:

我想知道htmlentities 在其中的任何地方都使用了什么。无论如何,您应该提供一个charset 以使其至少为自己工作:php.net/manual/en/function.htmlentities.php encoding=\"UTF-16\" - 这真的是输出的真实编码吗? 该行不再有错误。显然,OP 在询问后更改了提要。投票结束。 我做到了,但后来它抛出了这个:“第 33 行第 157 列的错误:开始和结束标签不匹配:p 行 0 和描述” 包含 HTML 的 Feed 项必须经过 html 编码或放入 CDATA 标记中。 【参考方案1】:

在那一行写着“TOKYO � A Japanese”(在提要的更下方)。 � 不是 utf-8。尝试utf8_encode(或iconv,如果您想要不同的编码)内容,甚至更好:use an XML processor 来创建提要。

【讨论】:

@hakre 然后 OP 在我回答时改变了这一点。当我下载提要时,它肯定是 utf8。我添加了 iconv 作为额外的解决方案。 工作,在给我这个问题的程度上......第157列第33行的错误:开始和结束标签不匹配:p第0行和描述......我宁愿没有返回并修复标签:( 这行得通,".iconv("ISO-8859-1", "UTF-8", $line['entry'])."【参考方案2】:

您必须配置您的数据库或连接。连接数据库后尝试执行mysql_set_charset('utf8');

http://php.net/manual/en/function.mysql-set-charset.php

附: 您应该使用&lt;?xml version="1.0" encoding="UTF-8" ?&gt; 或删除该行。您的输出看起来像是基于 8 位的。

【讨论】:

以上是关于PHP 生成 RSS XML - 编码错误的主要内容,如果未能解决你的问题,请参考以下文章

生成 PHP SimpleXML RSS 提要时出现 UTF8 错误

生成 PHP SimpleXML RSS 提要时出现 UTF8 错误

需要 php 编码特殊字符而不是 html 标签,以便包含在 wordpress 扩展 rss 文件中

解析 XML(RSS 提要)的 PHP 错误

PHP 的 XML 字符编码问题

从 UTF-8 编码的 XML 源生成 ISO-8859-1 编码的文本输出