2012-04-03 34 views
1

請幫我...PHP,XML,DOM ---如何確保最終的XML文件encoding = utf-8?

這裏是詳細的情況..

我有一個包含XML標記例如XML文件

data.xml - following its content 
----------------- 
<data> 
<node1>some text</node1> 
</data> 
------------------- 

現在我將這個文件上傳到我的翻譯服務。 我的代碼加載文件...下面是PHP代碼

$dom = new DOMDocument('1.0', 'utf-8'); 
if (!$dom->load($target_file)) { 
    echo "Cannot load file $target_file"; 
    exit; 
} 

然後我的邏輯操作,並且與例如一些重音字符替換節點值內內和它工作得很好,最後我保存文件

$dom->save($target_file); 

現在的輸出應該像如下

data.xml - following its content 
----------------- 
<?xml version="1.0" encoding="utf-8"?> 
<data> 
<node1>nënë</node1> 
</data> 
------------------- 

但是當我打開該文件的輸出作爲遵循

------------------- 
<?xml version="1.0"?> 
<data> 
<node1>n&#xEB;n&#xEB;</node1> 
</data> 
------------------- 

請幫助我...我應該如何確保xml文件編碼應該是UTF-8?

等待......

+0

嘗試在插入前使用'函數utf8_encode()'(http://www.php.net/manual/en/function.utf8-encode.php)上的文本字符串到'DOMDocument'對象 – Yaniro 2012-04-03 17:36:43

+0

有趣的是,如果目標文檔具有開始的<?xml version =「1.0」encoding =「utf-8」?>那麼最終的輸出將起作用。 – Shahid 2012-04-04 03:59:09

回答

0

不知道你是否已經解決與否:

如果你的數據是UTF-8編碼,當您發現saveXML()打開將所有非ASCII字符轉換爲數字實體(例如,ä - > &#xF6;):

加載源數據時可能已丟失XML聲明。嘗試添加<?xml version =「1.0」encoding =「UTF-8」?在使用load()或loadXML()讀取文檔之前,可以使用文檔的起始部分(>)。然後非ASCII字符應該保持不變。爲我工作。

來源:http://www.php.net/manual/en/domdocument.savexml.php#97434