在创建xml文件时附加编码

时间:2010-07-31 16:34:32

标签: php xml character-encoding

此代码创建一个xml文件(如果它不存在):

$xmldoc = new DOMDocument();
    if(file_exists('test.xml')){
    $xmldoc->load('test.xml');
    } else {
    $xmldoc->loadXML('<root/>'); 
    }

但是,我还希望在创建文件时自动附加encoding="UTF-8"。怎么会在PHP中这样做?

3 个答案:

答案 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();