SimpleXML编辑导出XML希腊字符乱码 缺失UTF-8编码声明解决方法
问题根因
你的代码中新建DOMDocument实例时未指定编码参数,新DOM对象不会继承原SimpleXML加载文件的UTF-8编码配置。未指定编码的情况下,DOMDocument默认会将非ASCII字符转义为数值实体,同时输出的XML文件会缺失编码声明,最终表现为希腊字符等多字节内容损坏。
修复方案
只需要给新创建的DOMDocument实例明确指定UTF-8编码即可,两种写法效果完全一致,二选一即可:
- 写法1:通过构造函数传参指定
// 将原代码中$dom = new DOMDocument('1.0');替换为以下行 $dom = new DOMDocument('1.0', 'UTF-8'); - 写法2:初始化后手动设置编码属性
$dom = new DOMDocument('1.0'); // 新增以下编码配置行 $dom->encoding = 'UTF-8';
配置完成后调用save()方法输出的文件会自动带上<?xml version="1.0" encoding="UTF-8"?>声明,所有UTF-8字符(包括希腊字母)会按原编码正常写入,不会出现异常转义、乱码问题。
修复后完整可运行代码
$xml=simplexml_load_file("test.xml", 'SimpleXMLElement', LIBXML_NOCDATA); // ...保留你原有的XML内容编辑逻辑 $dom_sxe = dom_import_simplexml($xml); // 初始化DOM文档时明确指定XML版本和UTF-8编码 $dom = new DOMDocument('1.0', 'UTF-8'); $dom->formatOutput = true; $dom_sxe = $dom->importNode($dom_sxe, true); $dom_sxe = $dom->appendChild($dom_sxe); $dom->save('output.xml');
注意:请确保编辑XML内容过程中操作的字符串本身为UTF-8编码,不要中途做非必要的编码转换,否则仍可能出现字符异常。
内容的提问来源于stack exchange,提问作者gerstavros
相关产品推荐
相关产品推荐

