2013-03-09 25 views
0

有哪些解析項目的XML文檔並顯示屬性的簡單的PHP腳本(屬性是俄羅斯,而XML文件使用 「UTF-8」 字符集):如何解決簡單的XML解析腳本中的字符集?

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
</head> 
<body> 
<?php 
    //header('Content-Type: text/html; charset=utf-8'); 
    $xml=simplexml_load_file('output.xml'); 
    echo $xml['moves']; 
?> 
</body> 
</html> 

我的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<game moves="Папа"> 
<a attr="2">123</a> 
</game> 

使用此代碼我只能看到「Папа」而不是「Папа」俄文文本,但如果我刪除所有HTML並通過頭文件()PHP設置字符集,它將正常工作!我該如何修復它?

+0

你有沒有試着用utf8_decode()? – Sam 2013-03-09 12:39:55

+0

您是否確定該XML是UTF-8編碼的?當您訪問上面引用的網頁時,瀏覽器會在「編碼」菜單中顯示哪種編碼? – 2013-03-09 12:44:04

+0

我已經更新了我的XML代碼;我確定該文件正確編碼爲「UTF-8」; utf8_decode()不能幫助我。 – user2078683 2013-03-09 12:54:46

回答

0

當創作文檔是HTML或XHTML時,它是導入ant添加一個Doctype聲明。這可能是解決你的問題

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
0

你應該經常仔細檢查,如果你不確定。讓我們這樣做。

首先檢查XML文件是否實際爲UTF-8 encoded

然後再次檢查您生成的HTML是否實際上是UTF-8編碼。

這裏是您例如,從上面的兩張支票:

<?php 
ob_start(); 
?> 
    <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    </head> 
    <body> 
    <?php 
    $buffer = file_get_contents('output.xml'); 
    if (!preg_match('//u', $buffer)) { 
     throw new Exception("XML file is not UTF-8 encoded!"); 
    } 

    $xml = simplexml_load_string($buffer); 
    echo $xml['moves']; 
    ?> 
    </body> 
    </html> 
<?php 
$buffer = ob_get_clean(); 
if (!preg_match('//u', $buffer)) { 
    throw new Exception("HTML is not UTF-8 encoded!"); 
} 
?>