使用SimpleXML生成XML文件很简单,示例代码如下:

$xml = new SimpleXMLElement('<books />');
$book = $xml->addChild('book');
$book->addChild('title', '拖延心理学');
$book->addChild('isbn', '9787300113906');
$rating = $book->addChild('rating', 5);
$rating->addAttribute('type', 'stars');
// 添加其他节点
echo $xml->asXML();

输入结果如下:

<?xml version="1.0"?>
<books><book><title>&#x62D6;&#x5EF6;&#x5FC3;&#x7406;&#x5B66;</title><isbn>9787300113906</isbn><rating type="stars">5</rating></book></books>

请注意输出的XML内容,声明中没有encoding="UTF-8",汉字也被转换为对应的UTF-8编码。

如何解决上面遇到的问题呢?

虽然SimpleXML没有提供设置encoding的接口,但是可以通过以下途径解决:

使用如下代码初始化SimpleXMLElement对象:

$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8"?><books />');

PS:网上有建议说在最后生成字符串时使用$xml = str_replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="UTF-8"?>', $xml);命令进行替换实现添加encoding的目的,但是这种方法无法解决汉字转为UTF-8编码的问题。