建立一個簡單XML結構,源檔案用gbk編寫結果報錯,改成utf8格式就正確,求原因?
//這是出錯的gbk編碼的檔案 header('content-type:application/xml;charset=gbk '); $x = new DOMDocument('1.0', 'gbk'); $a = $x->createElement('a'); $x->appendChild( $a ); $you = $x->createTextNode('你'); $a->appendChild( $you ); echo $x->saveXML();
================================下面是不出錯的U8編碼的源檔案=================================
//這是U8編碼的源檔案 header('content-type:application/xml;charset=utf-8 '); $x = new DOMDocument('1.0', 'utf-8'); $a = $x->createElement('a'); $x->appendChild( $a ); $you = $x->createTextNode('你'); $a->appendChild( $you ); echo $x->saveXML();
回複討論(解決方案)
XML 的工作字元集是 utf-8
如果是工作字元集U8的原因,那麼參數二可以指定encoding還有什麼存在意義呢?另外報錯中的conv error是什麼錯誤?
XML 的工作字元集是 utf-8
conv error 轉換失敗
指定工作字元集,只在微軟的部分產品中有效(因為 XML 是微軟發明的)
php5.3 以後,可以讀取非 utf-8 字元集的 XML 文檔
php有沒有可以把xml對象按gbk格式輸出字串的方法?
conv error 轉換失敗
指定工作字元集,只在微軟的部分產品中有效(因為 XML 是微軟發明的)
php5.3 以後,可以讀取非 utf-8 字元集的 XML 文檔
是我說的不準確
header('content-type:application/xml;charset=gbk');$x = new DOMDocument('1.0', 'gbk');$a = $x->createElement('a');$x->appendChild( $a ); $you = $x->createTextNode(iconv('gbk', 'utf-8', '你'));$a->appendChild( $you );echo $x->saveXML();
你可以看到輸出的的確是 gbk 編碼的內容
也就是說,是可以輸出指定字元集的 XML 文檔的
但這並不改變工作字元集是 utf-8 的事實
conv error 是在將內部 utf-8 字元集向指定的輸出字元集轉換時產生的
$you = $x->createTextNode('你'); 中 gbk 的 你 被當做 utf-8 字元進行處理時,自然要出現錯誤了