当我尝试使用DomDocument将UTF-8字符串写入XML文件时,实际上是写入字符串的十六进制表示法,而不是字符串本身。
例如:
ירושלים
代替:ירושלים
任何想法如何解决问题?
好了,你去:
$dom = new DOMDocument('1.0', 'utf-8'); $dom->appendChild($dom->createElement('root')); $dom->documentElement->appendChild(new DOMText('ירושלים')); echo $dom->saveXml();
会正常工作,因为在这种情况下,您构造的文档将保留指定为第二个参数的编码:
<?xml version="1.0" encoding="utf-8"?> <root>ירושלים</root>
但是,一旦将XML加载到未指定编码的Document中,您将丢失在构造函数中声明的所有内容,这意味着:
$dom = new DOMDocument('1.0', 'utf-8'); $dom->loadXml('<root/>'); // missing prolog $dom->documentElement->appendChild(new DOMText('ירושלים')); echo $dom->saveXml();
不会使用utf-8编码:
<?xml version="1.0"?> <root>ירושלים</root>
因此,如果您加载XML,请确保它是
$dom = new DOMDocument(); $dom->loadXml('<?xml version="1.0" encoding="utf-8"?><root/>'); $dom->documentElement->appendChild(new DOMText('ירושלים')); echo $dom->saveXml();
它将按预期工作。
或者,您也可以在加载文档后指定编码。