是否可以使用PHP将xml更改为UTF-8

是否可以使用PHP将xml更改为UTF-8,php,xml,Php,Xml,我有一个XML文档,它是ITF-16 LE编码。因此,使用wp all import是不可读的 当我查看版本部分时,我看到了这一点 在我的visualstudio代码中,我看到了底部。 UTF-16 LE 我已经使用VisualStudio进行了更改,但由于每次都将是一个新文件(格式相同)。如果PHP能够将其转换为UTF-8,那就太好了 <?xml version="1.0" encoding="Unicode" ?> <root> <docs>

我有一个XML文档,它是ITF-16 LE编码。因此,使用wp all import是不可读的

当我查看版本部分时,我看到了这一点

在我的visualstudio代码中,我看到了底部。
UTF-16 LE

我已经使用VisualStudio进行了更改,但由于每次都将是一个新文件(格式相同)。如果PHP能够将其转换为UTF-8,那就太好了

<?xml version="1.0" encoding="Unicode" ?>
<root>
  <docs>


是否可以使用PHP更改此文件的编码?

这里有一个通用XSLT,它将按原样复制整个输入XML,但使用xsl:output中指定的编码。剩下的就是在PHP中运行XSLT转换

XSLT


这里是一个通用XSLT,它将按原样复制整个输入XML,但编码在xsl:output中指定。剩下的就是在PHP中运行XSLT转换

XSLT


DOMDocument::loadXML()
从XML声明中读取编码属性。但是
Unicode
不是有效的编码afaik-我希望
UTF-16LE
。PHP中的DOM API使用UTF-8。因此,它会将任何内容解码为UTF-8(取决于定义的编码),并根据目标文档的编码对其进行编码。您可以在加载后更改它

下面是一个演示:

$xml = <<<'XML'
<?xml version="1.0" encoding="utf-8"?>
<foo>ÄÖÜ</foo>
XML;

$document = new DOMDocument();
$document->loadXML($xml);

$encodings = ['ASCII', 'UTF-16', 'UTF-16LE', 'UTF-16BE'];

foreach ($encodings as $encoding) {
    // set required encoding
    $document->encoding = $encoding;
    // save
    echo $encoding."\n".$document->saveXML()."\n";
}
$xml=
DOMDocument::loadXML()
从xml声明中读取编码属性。但是
Unicode
不是有效的编码afaik-我希望
UTF-16LE
。PHP中的DOM API使用UTF-8。因此,它会将任何内容解码为UTF-8(取决于定义的编码),并根据目标文档的编码对其进行编码。您可以在加载后更改它

下面是一个演示:

$xml = <<<'XML'
<?xml version="1.0" encoding="utf-8"?>
<foo>ÄÖÜ</foo>
XML;

$document = new DOMDocument();
$document->loadXML($xml);

$encodings = ['ASCII', 'UTF-16', 'UTF-16LE', 'UTF-16BE'];

foreach ($encodings as $encoding) {
    // set required encoding
    $document->encoding = $encoding;
    // save
    echo $encoding."\n".$document->saveXML()."\n";
}

$xml=maybe work具有指定目标编码的简单XSLT将完成此工作。可能有效使用具有指定目标编码的简单XSLT即可完成此工作。此处不需要XSLT。需要将XML加载到DOM中(使用ext/xsl),如果这样做,您只需设置编码属性并保存文档。它需要将XML加载到DOM中(使用ext/xsl),如果这样做,您可以设置encoding属性并保存文档� 在你看来,你的输出是混乱的,有损于你的答案。当然,它只是捕获输出方式的产物,而不是写入输出文件的内容的反映,而是写入输出文件的内容的反映。它必须显示断字符,因为像SO这样的UTF-8页面不能显示UTF-16编码字符� 在你看来,你的输出是混乱的,有损于你的答案。当然,它只是捕获输出方式的产物,而不是写入输出文件的内容的反映,而是写入输出文件的内容的反映。它必须显示断字符,因为像SO这样的UTF-8页面不能显示UTF-16编码字符。
ASCII
<?xml version="1.0" encoding="ASCII"?>
<foo>&#196;&#214;&#220;</foo>

UTF-16
��<?xml version="1.0" encoding="UTF-16"?>
<foo>���</foo>

UTF-16LE
<?xml version="1.0" encoding="UTF-16LE"?>
<foo>���</foo>

UTF-16BE
<?xml version="1.0" encoding="UTF-16BE"?>
<foo>���</foo>