为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
LEATH 2022-01-02 14:42:01
我有一个 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 更改此文件的编码?
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

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";

}

输出:


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。


当然,反过来也是一样的。


查看完整回答
反对 回复 2022-01-02
?
繁星coding

TA贡献1797条经验 获得超4个赞

这是一个通用 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">

    <xsl:output method="xml" indent="yes" encoding="utf-8"/>


    <xsl:template match="node()|@*">

        <xsl:copy>

            <xsl:apply-templates select="node()|@*"/>

        </xsl:copy>

    </xsl:template>

</xsl:stylesheet>


查看完整回答
反对 回复 2022-01-02
  • 2 回答
  • 0 关注
  • 284 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信