2009-11-23 75 views
2
<?php 
$xml = <<< AAA 
<test>c đưa lên 1 -&gt; 10 k</test> 
AAA; 
$p = xml_parser_create(); 
xml_parse_into_struct($p, $xml, $vals, $index); 
xml_parser_free($p); 
print_r($vals); 

我能得到不同的結果爲什麼? 在我的電腦,結果是XML解析器在不同環境下的不同結果,爲什麼?

Array 
(
    [0] => Array 
     (
      [tag] => TEST 
      [type] => complete 
      [level] => 1 
      [value] => c đưa lên 1 -> 10 k 
     ) 

) 

在procuction環境下,resut是

Array 
(
    [0] => Array 
     (
      [tag] => TEST 
      [type] => complete 
      [level] => 1 
      [value] => c đưa lên 1 - 10 k 
     ) 

) 

>是消失。 爲什麼?

+0

使用PHP <= 5.2.6與libxml2> = 2.6.32時libxml2的問題。 PHP 5.2.7或更高版本適用於libxml2的新行爲(請參閱:http://bugs.php.net/bug.php?id=45996)。簡單升級PHP就可以解決問題。 – 2009-11-23 04:53:41

回答

3

有時,當您切換環境時,您會看到一些與文本編碼和其他國際化相關陷阱有關的差異。因此,您可以嘗試在xml_parser_create函數中明確設置編碼。

要考慮的另一件事是PHP版本。在兩個環境中運行一個phpinfo()並檢查其中的版本。這可能是PHP版本生產使用編碼忽略HTML實體(& gt;)...只是一個猜測。

編輯:
根據這一bug report,忽略HTML實體的這種行爲可以通過libxml2的原因。嘗試將生產服務器上的libxml2更新爲最新版本。

+0

看不到phpinfo的任何區別。兩者的編碼都是utf8。 – 2009-11-23 03:25:14

+0

<不消失。 – 2009-11-23 03:27:10

+0

檢查我的編輯中的錯誤報告。如果php版本是相同的,那麼libxml2的區別是有道理的。 – Matt 2009-11-23 03:32:03

0

似乎是一個編碼問題。

+0

這是你的結果? – 2009-11-23 03:21:32

相關問題