我颳了一些偶爾在標題中使用UTF-8字符的網站,但沒有指定UTF-8作爲字符集(qq.com是一個示例) 。當我在瀏覽器中查看網站時,我想要複製的數據(即標題)看起來正確(日文或中文..不太確定)。我可以複製標題並將其粘貼到終端中,看起來完全一樣。我甚至可以將它寫入數據庫,當我從數據庫中檢索時,它看起來仍然是相同的,並且是正確的。Curl:使用不正確的字符集從網站獲取UTF-8數據
但是,當我使用cURL時,打印的數據是錯誤的。我可以從命令行運行cURL或使用PHP ..當它被打印到終端時,它顯然是不正確的,並且當我將它存儲到數據庫時仍然是這種方式(請記住:終端可以可以正確顯示這些字符)。我試過以下的所有符合條件的組合:
- 設置
CURLOPT_BINARYTRANSFER
到true
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?
我給這個一杆,但它好像如果我能得到它只會工作字符集。如果該網站根本沒有字符集聲明呢? – 2012-02-25 20:15:51
這是正確的答案。你在'mb_convert_encoding'和'utf8_encode'的右邊,但你沒有指定源編碼,所以它使用了(錯誤的)默認值。 – spencercw 2012-02-25 20:16:59
@tandu一個常見的策略是查看它是否是有效的UTF-8。如果不是,則假定它是ISO-8859-1。如果沒有明確地聲明編碼是什麼,那麼你可以做的事情不多,但應該嘗試做出有根據的猜測。 – spencercw 2012-02-25 20:18:30