2012-02-25 86 views
1

我颳了一些偶爾在標題中使用UTF-8字符的網站,但沒有指定UTF-8作爲字符集(qq.com是一個示例) 。當我在瀏覽器中查看網站時,我想要複製的數據(即標題)看起來正確(日文或中文..不太確定)。我可以複製標題並將其粘貼到終端中,看起來完全一樣。我甚至可以將它寫入數據庫,當我從數據庫中檢索時,它看起來仍然是相同的,並且是正確的。Curl:使用不正確的字符集從網站獲取UTF-8數據

但是,當我使用cURL時,打印的數據是錯誤的。我可以從命令行運行cURL或使用PHP ..當它被打印到終端時,它顯然是不正確的,並且當我將它存儲到數據庫時仍然是這種方式(請記住:終端可以可以正確顯示這些字符)。我試過以下的所有符合條件的組合:

  • 設置CURLOPT_BINARYTRANSFERtrue
  • mb_convert_encoding($html, 'UTF-8')
  • utf8_encode($html)
  • utf8_decode($html)

這些都不如預期顯示的字符。這是非常令人沮喪的,因爲我可以通過訪問網站輕鬆獲得正確的角色,但cURL不能。我已閱讀了很多建議,例如:How to get web-page-title with CURL in PHP from web-sites of different CHARSET?

解決方案通常似乎是「將數據轉換爲UTF-8」。說實話,我實際上並不知道這意味着什麼。上述函數不能將數據轉換爲UTF-8嗎?爲什麼它不是UTF-8?它是什麼,爲什麼它在某些情況下顯示正確,但不適合cURL?

回答

4

你嘗試過:

$html = iconv("gb2312","utf-8",$html);

gb2312從qq.com頭拍攝

+0

我給這個一杆,但它好像如果我能得到它只會工作字符集。如果該網站根本沒有字符集聲明呢? – 2012-02-25 20:15:51

+0

這是正確的答案。你在'mb_convert_encoding'和'utf8_encode'的右邊,但你沒有指定源編碼,所以它使用了(錯誤的)默認值。 – spencercw 2012-02-25 20:16:59

+0

@tandu一個常見的策略是查看它是否是有效的UTF-8。如果不是,則假定它是ISO-8859-1。如果沒有明確地聲明編碼是什麼,那麼你可以做的事情不多,但應該嘗試做出有根據的猜測。 – spencercw 2012-02-25 20:18:30