亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以使用 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 關注
  • 307 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號