2014-11-02 51 views
0

我在讀取xml文件時遇到錯誤的字符編碼問題。使用DOMDocument解析xml文件時的字符編碼

雖然這一個正確顯示該文件的全部內容......

$reader = new DOMDocument(); 
$reader->preserveWhiteSpace = false; 
$reader->load('zip://content.odt#content.xml'); 
echo $reader->saveXML(); 

...這一個給了我一個奇怪的輸出(德語變音,長破折號,μ或類似的字符不顯示正確):

$reader = new DOMDocument(); 
$reader->preserveWhiteSpace = false; 
$reader->load('zip://content.odt#content.xml'); 
$elements = $reader->getElementsByTagName('text'); 
foreach($elements as $node){ 
    foreach($node->childNodes as $child) { 
     $content .= $child->nodeValue; 
    } 
} 
echo $content; 

我不知道這是爲什麼。希望有人能向我解釋。

回答

0
DOMDocument::saveXML() 

此方法以字符串形式返回整個XML文檔。與任何XML文檔一樣,編碼在XML declaration中給出,或者它具有UTF-8的默認編碼。

DOMNode::$nodeValue 

包含節點的值,通常是文本。所有文本字符串DOMDocument庫返回 - 其中DOMNode是 - 的一部分 - 使用UTF-8編碼,而不考慮XML文檔的編碼。

當你寫,如果你顯示第一:用不同的編碼方式,

echo $reader->saveXML(); 

所有的變音符號被保留下來,這是最有可能的XML本身船舶UTF-8,因爲後來

$content .= $child->nodeValue; 
... 
echo $content; 

不這樣做。

由於您不分享如何以及在哪個應用程序中顯示並閱讀輸出,所以不能多說。

您很可能需要在後面的情況下將字符編碼提示給顯示應用程序。例如,如果你在瀏覽器中顯示的文字,你應該在一開始添加適當的內容類型標題:

header("Content-Type: text/plain; charset=utf-8"); 

How to set UTF-8 encoding for a PHP file進行比較。