2009-06-28 98 views
0

我通過捲曲得到一個網頁與此代碼:stri_replace搞亂字符

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$message = curl_exec($ch); 

curl_close($ch); 

我現在想做出一些替換在$消息的代碼,但在此之前,我傾倒在一個文件中的代碼:

file_put_contents('debug_before_replace.txt',$message); 

當我看看這個文件,所有的文字似乎罰款,比如我這裏標題:

<title>D.O.C.| Jantar Vínico Quinta do Portal | Quinta-feira, 25 de Junho 2009</title> 

現在我做替換:

$消息= str_ireplace(陣列(
'體>', '/ BODY>' ) 陣列(
$ fraseemcima, $ frasebaixo ) $消息 );

現在我轉儲$信息到另一個文件:

file_put_contents('debug_after_replace.txt',$message); 

當我看看文件我看到這一點:

<title>D.O.C.| Jantar Vínico Quinta do Portal | Quinta-feira, 25 de Junho 2009</title> 

而且我有各種亂七八糟的char在代碼的其餘部分。

任何人都明白爲什麼stri_replace會搞砸了嗎?我正在嘗試發送一些郵件,這會弄亂一切。

注:在更換我有身體和/ body標籤是正確的,但如果我增加了< SO將刪除的話

編輯:我有固定它!

白衣這種簡單的線條一切工作和Outlook看起來不錯:

$message = utf8_decode(curl_exec($ch)); 

感謝macbirdie和S.格里格指着我在正確的方向。 猜猜我仍然有一些學習做,當涉及到的字符集

再次感謝

+0

什麼是通過curl檢索的html文檔的字符集? – VolkerK 2009-06-28 20:36:44

+0

字符集是UTF-8 – AntonioCS 2009-06-28 21:03:46

回答

1

您正在編輯的文字是最有可能的UTF-8編碼或一些其它的多字節編碼。 str_ireplace()不是多字節安全並在單個字節上運行。這會導致您的多字節字符可能被破壞的情況。 您也應該檢查,如果該文件包含 yte- Ø rder- 中號方舟(BOM) - (根據this comment),這也可能會導致一些問題

1

你將不得不使用多字節感知功能替換字符,如mb_eregi_replace()

如果存在任何文件,該文件也可能丟失unicode用來指示UTF-8擴展字符被寫入的尾數的byte-order mark,因爲它可能會丟失,因爲替換函數可能會將其視爲非文本,但這完全是猜測。