生成 PHP SimpleXML RSS 提要时出现 UTF8 错误
Posted
技术标签:
【中文标题】生成 PHP SimpleXML RSS 提要时出现 UTF8 错误【英文标题】:UTF8 Errors on generating PHP SimpleXML RSS feed 【发布时间】:2012-02-06 11:33:01 【问题描述】:我正在为一个站点创建一个 RSS 提要。
我正在使用 SimpleXML 创建 XML 结构。当我调用 $xml->asXML(); 时,它会抛出许多警告:
ErrorException [ Warning ]: SimpleXMLElement::asXML() [simplexmlelement.asxml]: string is not in UTF-8
我不确定这个错误是什么。它正在读取的数据库表是 utf8_general_ci。我尝试在字符串上运行 utf_encode 而不是修复它。
//First create the XML root
$xml = new SimpleXMLElement('<rss version="2.0"></rss>');
//Create the Channel
$channel = $xml->addChild('channel');
//Construct the feed parameters
$channel->addChild('title', 'CGarchitect Feed');
$channel->addChild('link', Config::get('base_url'));
$channel->addChild('description', 'CGarchitect is the leading online community for architectural visualization professionals.');
$channel->addChild('pubDate', date("D, d M Y H:i:s T"));
//Get the feed items
$nodes = <....snip... >
foreach ($nodes as $node)
//Parse the title and description
$title = htmlentities(strip_tags($node->title));
$description = htmlentities(strip_tags($node->description));
$newItem = $channel->addChild('item');
$newItem->addChild('title', $title);
$newItem->addChild('description', $description);
$newItem->addChild('pubDate', date("D, d M Y H:i:s T", $node->published_at));
header('Content-Type: application/xhtml+xml');
echo $xml->asXML();
提前谢谢...
伦纳德
【问题讨论】:
您是否也将mysql connection encoding 设置为UTF8? @Jon 是的。 mysql_client_encoding() 返回 'utf8' 您确定您正在使用 UTF-8 连接到数据库吗?建立连接后,第一次执行此查询:mysql_query("SET NAMES 'utf8'"); 我添加了上面的代码,结果相同。如前所述,我运行了 mysql_client_encoding() 并返回 utf8。 atxba 为您提供了一个很好的提示。问题是,htmlentities() 在标准模式下不能在 utf-8 中工作。像这样使用它: htmlentities ($string,ENT_NOQUOTES, 'UTF-8');标准是 ISO-8859-1。所以你必须改变它。 “ENT_NOQUOTES”表示不会替换任何引号。对于其他值,请查看手册htmlentitie() 【参考方案1】:我能够重现您的问题,将您的 $nodes ... sn-p 替换为
class myNode
public $title="(╯°□°)╯︵ ┻━┻";
public $description="dscr";
public $published_at=0;
public function __construct()
$this->published_at=time();
$nodes = array(new myNode());
简单地删除对 htmlentities 的调用似乎可以正常工作。 (输出被正确转义为字符实体)
【讨论】:
好的,这行得通。我正在运行 htmlentities,因为我在数据库中有一些条目具有 & 字符而不是 &.... 或者,您也可以指定 htmlentities 的字符集,例如 htmlentities(strip_tags($node->title), ENT_COMPAT,'utf-8');这对我也有用 谢谢。作为记录,我无法让它与 htmlentities 一起使用,因为我不断得到未定义的实体 'lsquo'。我切换到使用 htmlspecialchars 并且它起作用了......以上是关于生成 PHP SimpleXML RSS 提要时出现 UTF8 错误的主要内容,如果未能解决你的问题,请参考以下文章