此代码创建一个xml文件(如果它不存在):
$xmldoc = new DOMDocument();
if(file_exists('test.xml')){
$xmldoc->load('test.xml');
} else {
$xmldoc->loadXML('<root/>');
}
但是,我还希望在创建文件时自动附加encoding="UTF-8"
。怎么会在PHP中这样做?
答案 0 :(得分:3)
要在<?xml encoding
的输出中添加/更改saveHTML()
值,您可以设置encoding
属性。
$xmldoc->load('test.xml');
$xmldoc->encoding= 'utf-8';
$xmldoc->save('test.xml');
然而,正如Artefacto所说,在这种情况下它毫无意义。没有<?xml encoding
声明或UTF-16 BOM 的XML文件肯定是UTF-8和所有 XML解析器将以这种方式读取(*)。通过在XML声明中添加显式encoding="utf-8"
参数,您将无法获得任何收益。
无论你使用什么方法进行测试,它都没有按你认为的那样做。也许你正在将XML加载到文本编辑器中,并将其保存为不同的编码或其他东西?在保存之前,您需要查看从哪些字符串进入DOM,如果它们不是UTF-8,则需要将它们转换为然后。
(*:除非它通过另一个具有更高优先级字符集规范方法的协议提供服务,例如HTTP的Content-Type
标头。但在这种情况下,无论如何都会忽略<?xml encoding
声明。)
答案 1 :(得分:0)
如果您尝试创建一个新的UTF-8编码文件,这应该有效:
$xmldoc = new DomDocument('1.0', 'UTF-8');
if(file_exists('test.xml')){
$xmldoc->load('test.xml');
} else {
$xmldoc->loadXML('<root/>');
}
但是如果你要打开一个没有用UTF-8编码的文件,那么输出就会出现问题...所以你要检查文件的编码是否存在,如果没有,你可以把它创建为UTF-8。
行:
<?php
$xmlDoc = new DOMDocument('1.0', 'utf-8');
print $xmlDoc->saveXML();
?>
输出:
<?xml version="1.0" encoding="utf-8"?>
答案 2 :(得分:0)
bobince的回答是正确的,也是很有帮助的 您还可以从您阅读或抓取的文件中读取$ dom-&gt;编码 我也用header();
输出它$xmldoc->load('test.xml');
$encoding = $dom->encoding;
/* ... manipulate dom ... */
header("Content-Type: application/xml; charset=". $encoding);
echo $dom->saveXML();