我解析CP1250編碼的字符串與simplexml_load_string
。所以,我在<?xml version="1.0" encoding="windows-1250"?>
的字符串開頭說明它。不幸的是,所有節點在simplexml_load_string
輸出中都以UTF8編碼。如何設置simplexml_load_string的輸出編碼PHP函數
有沒有一種方法,如何指定輸出編碼以及或我使用的iconv使用時的輸出?
我解析CP1250編碼的字符串與simplexml_load_string
。所以,我在<?xml version="1.0" encoding="windows-1250"?>
的字符串開頭說明它。不幸的是,所有節點在simplexml_load_string
輸出中都以UTF8編碼。如何設置simplexml_load_string的輸出編碼PHP函數
有沒有一種方法,如何指定輸出編碼以及或我使用的iconv使用時的輸出?
你的問題是不完全清楚我,所以我儘量回答它在我的理解方式,有可能給出的答案是那麼。
如果裝入CP1250/Windows的1250編碼字符串和字符串包含在XML declration該編碼信息,通常默認的SimpleXML已經保持此爲輸出。所以通常你不需要在這裏做任何事情。
不過,若你需要顯式地設置輸出編碼:
一個SimpleXMLElement
不允許你改變由它自己的編碼。然而,像SimpleXML經常在它自己無法做到的時候,姊妹庫DOMDocument
能夠。因爲他們都是姐妹,所以他們可以互相交流。在下面的例子中,我加載UTF-8編碼的字符串,然後設置XML輸出編碼US-ASCII明確:
$inputUTF8 = <<<INPUT
<?xml version="1.0" encoding="UTF-8"?>
<root>
Äpfel wachsen überirdisch
</root>
INPUT;
$xml = simplexml_load_string($inputUTF8); // load UTF-8 encoded string
$xml->asXML('php://output'); // outputs as UTF-8 (same as input by default)
// set document encoding to US-ASCII via DOMDocument
$doc = dom_import_simplexml($xml)->ownerDocument;
$doc->encoding = 'US-ASCII';
$xml->asXML('php://output'); // outputs as US-ASCII
作爲遵循的輸出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
Äpfel wachsen überirdisch
</root>
<?xml version="1.0" encoding="US-ASCII"?>
<root>
Äpfel wachsen überirdisch
</root>
作爲該顯示,則DOMDocument::$encoding
屬性更改了輸出編碼,即使是SimpleXMLElement
,也不是字符集的一部分的字符被表示爲它們的Unicode碼位的數字XML實體(這裏的Ä
是U + 00C4,十進制196是十六進制)。使用Windows -1250作爲輸出enc oding會給我一個未知字符錯誤在屏幕上:
// set document encoding to Windows-1250 via DOMDocument
$doc = dom_import_simplexml($xml)->ownerDocument;
$doc->encoding = 'Windows-1250';
$xml->asXML('php://output'); // outputs as Windows-1250
輸出繼電器(UTF-8顯示):
<?xml version="1.0" encoding="Windows-1250"?>
<root>
�pfel wachsen �berirdisch
</root>
二進制八位位組C4
和FC
不能顯示爲UTF-8,以便在這裏在我的情況下,顯示�
。這也顯示輸出是在Windows-1250編碼中的,否則顯示器將顯示這些字符。
我希望這是有益的甚至是 - 寫在我的答案的開始 - 從你描述它是沒有必要指定編碼輸出。如果結果與本答案中概述的不同,請分享您的PHP和libxml版本。