2014-09-18 42 views
0

我正在使用simplexml_load_string將XML文檔加載到對象中。這似乎是偉大的工作,直到我碰到這個元素來:simplexml_load_string將「 」變成「Â」

<some_string_val>1.&#160;&#160;&#160;&#160; Some text.</some_string_val> 

運行,通過simplexml_load_string跑後,一下就出來了是:

["some_string_val"]=> string(20) "1.    Some text" 

我試着使用:

html_entity_decode($string, ENT_QUOTES, "Windows-1252"); 

這似乎將&#160;的純文本,但當我試圖通過simplexml_load_string運行,我得到了同樣的結果。我也嘗試過使用UTF-8和其他一些類似或更差的結果。

那麼,我能做些什麼來將&#160;轉換爲UTF-8,以便它可以被simplexml_load_string正確解析?保持HTML實體完好無損,因爲這將進入CSV。

編輯:這已被不公正地標記爲一對夫婦的原因重複:

  1. 這不是語言無關的;這是處理一組特定的PHP函數,不同於這個被標記爲
  2. 的帖子,這不是一個HTML頁面或PDF,而是一個CSV,所以我不能設置標題。接受的解決方案將不會在我的情況下工作
+0

'[「some_string_val」] => string(20)「1.在瀏覽器中看不到輸出的文本」我不信。我也證實這是重複的。對於CSV文件,您可能需要查看所打開軟件的手冊,瞭解*如何導入使用UTF-8字符編碼*的.csv文件。 CSV文件本身在PHP中使用UTF-8時效果很好。 – hakre 2014-10-11 23:56:48

回答

0

我認爲它解析正確。它只是函數的工作方式,用特殊字符替換這些代碼。

您可以修復的結果字符串,將其轉換爲CP1251

$str = iconv('utf-8', 'cp1251', $str); 

另外我想刪除雙空格寫成CSV檔案前

$str = str_replace(chr(160), ' ', $str); 
$str= trim(preg_replace('/\s+/', ' ', $str)); 
+0

在我輸入'simplexml_load_string'之前,我需要做這個嗎?在它已經通過並且似乎沒有做任何事情之後,我嘗試了它。我也曾嘗試過,但我可能做錯了。 – Samsquanch 2014-09-19 15:56:00

+0

@Samsquanch之後,當你使用該XML對象時。或者更好的方法是在解析XML之前將所有特殊字符( )替換爲相同的字符。在這種情況下,你可能不需要轉換編碼,你可以節省一些時間 – Tengiz 2014-09-19 17:34:28

+0

只是在解析該字符串之前運行這個:$ str = preg_replace('/   /','',$ str); – Tengiz 2014-09-19 18:09:07

0

的SimpleXML本身沒有問題正確解析XML:

$string = '<some_string_val>1.&#160;&#160;&#160;&#160; Some text.</some_string_val>'; 
$xml = simplexml_load_string($string); 
echo $xml; 

輸出(Demo):

1.  Some text. 

會發生什麼事是你讀出的是UTF-8字符串(C2 A0)後,您將其發送到的地方,並告訴地方不在於它是UTF-8編碼,但在不同的編碼。最有可能的拉丁-1,我必須猜測,你沒有與你的問題分享這種信息。

在某個地方然後將顯示二進制序列C2 A0爲兩個字符:

  1. C2Â
  2. A0 「」(無間斷空間)

例如:你需要編寫成CSV文件。你可以直接編寫UTF-8編碼的數據。當您在電子表格應用程序中打開CSV文件時,它應該詢問您的編碼。告訴它使用Unicode UTF-8編碼。然後一切都很好。

如果你在瀏覽器中顯示數組(這是我如何閱讀你的問題),然後告訴瀏覽器該網站是UTF-8。你應該在你的網頁瀏覽器菜單中找到一個編碼設置來做到這一點。