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

我有一个 ITF-16 LE 编码的 XML 文档。因此,使用 wp all import 无法读取。


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


<?xml version="1.0" encoding="Unicode" ?> 在我的 Visual Studio 代码中,我在底部看到了。 UTF-16 LE


我已经使用 Visual Studio 进行了更改,但是因为它每次都是一个新文件(格式相同)。如果 PHP 可以将其转换为 UTF-8 那就太好了


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

<root>

  <docs>

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


LEATH
浏览 285回答 2
2回答

PIPIONE

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) {&nbsp; &nbsp; // set required encoding&nbsp; &nbsp; $document->encoding = $encoding;&nbsp; &nbsp; // save&nbsp; &nbsp; echo $encoding."\n".$document->saveXML()."\n";}输出: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>生成的字符串随定义的编码而变化。我从这里开始使用 UTF-8 文档 - 因为 SO 本身就是 UTF-8,您可以通过这种方式看到非 ascii 字符。ASCII触发非 ascii 字符的实体编码。UTF-16添加 BOM 以提供字节顺序。SO 无法显示 UTF-16 编码的字符 - 所以你会得到 符号。UTF-16LE并UTF-16BE在编码中定义字节顺序,不需要BOM。当然,反过来也是一样的。

繁星coding

这是一个通用 XSLT,它将按原样复制您的整个输入 XML,但使用 xsl:output 中指定的编码。剩下的就是在 PHP 中运行 XSLT 转换。XSLT<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">&nbsp; &nbsp; <xsl:output method="xml" indent="yes" encoding="utf-8"/>&nbsp; &nbsp; <xsl:template match="node()|@*">&nbsp; &nbsp; &nbsp; &nbsp; <xsl:copy>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <xsl:apply-templates select="node()|@*"/>&nbsp; &nbsp; &nbsp; &nbsp; </xsl:copy>&nbsp; &nbsp; </xsl:template></xsl:stylesheet>
打开App,查看更多内容
随时随地看视频慕课网APP