2012-03-17 61 views
2

我有一個XML文件,我正在用SimpleXML在php中解析。第一行是在PHP中解析XML文檔

<?xml version="1.0" encoding="iso-8859-1"?> 

解析的結果被存儲在$xml,如果我做的:

echo $xml->asXML(); 

然後將整個文件顯示完美。

但如果我深入到結構,無論如何,我得到的everwhere,如:

echo $xml->Chapter->asXML(); 

裏面的一些XML元素的存在MATHML(<math>),這是A的發生在哪裏。 例如字符被替換爲。

如何解析XML文件但不會丟失MathML字符?

+1

∈不是可以在ISO 8859-1中表示的字符,請將您的XML更改爲使用UTF-8編碼。您還需要告訴PHP它的輸出是UTF-8。 – salathe 2012-03-17 18:28:41

+0

,但如果我只是在瀏覽器中查看xml文件本身,那麼它的表現也很好,而且正如我上面所說的,只有在挖掘結構後纔會出現。 – 2012-03-17 18:29:58

+0

然後PHP已經輸出爲UTF-8,你仍然需要在XML中改變'encoding =「...」''。 – salathe 2012-03-17 18:32:09

回答

2

∈不是char可以在ISO 8859-1中表示的acter,將你的XML改爲使用UTF-8編碼。

舉例說明問題。

$x = simplexml_load_string('<?xml version="1.0" encoding="iso-8859-1"?> 
<example><math>∈</math></example>'); 
echo $x->math, PHP_EOL; 

$x = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?> 
<example><math>∈</math></example>'); 
echo $x->math, PHP_EOL; 

輸出(如UTF-8)以下內容。

â 
∈ 

的SimpleXML將嘗試當encoding設置爲不同的東西轉換爲UTF-8。當輸入已經是UTF-8編碼並且encoding聲明不正確時,不要指定該工作要做是個好主意。


還可以肯定的是PHP本身輸出UTF-8,並告訴瀏覽器是這種情況!

您可以通過設置default_charset INI選項(在php.ini或ini_set()),或發送正確Content-Type頭(header('Content-Type: text/html; charset=utf-8'))做到這一點。

-1

在使用SimpleXML解析輸入之前,可能需要將輸入轉換爲其他編碼。

  1. 讀取文件內容文本
  2. 轉換爲不同的編碼
  3. 解析用SimpleXML和做任何你想做
  4. 如果需要的話,將輸出轉換爲原始編碼

爲此,函數iconv()非常有用: http://php.net/manual/en/function.iconv.php

0

問題不是你的編碼,問題是並非所有的瀏覽器都支持MathML,你的script回顯給瀏覽器。

http://en.wikipedia.org/wiki/MathML#Web_browsers

在以下瀏覽器測試了這個:

  • Safari瀏覽器5.1.2 - 失敗
  • 鉻17.0.9x - 部分
  • 火狐3.6.28 - 工程
+0

不,這不是問題,因爲MathML在其他地方的Safari 5.1.4中工作。 – 2012-03-17 19:06:07

+0

我恭敬地不同意。如果你在不同的瀏覽器中打開你的腳本,你會看到每個腳本以不同的方式呈現腳本的輸出。 – 2012-03-17 19:08:07

+0

是的我知道,它在每個瀏覽器中都會有所不同,但在Safari 5.1.4(和Firefox)中加載XML文件時,如預期的那樣顯示MathML(不含Â)。所以這不是問題 – 2012-03-17 19:11:44