2013-03-29 23 views
0

我想要獲取網頁解析其中的一部分,然後將其作爲值張貼。問題是:當字符爲ó時,我檢索ó,因此在發佈它時,urlencode轉換會將這些字符轉換爲完全不同的字符,這不起作用。當獲取一個網頁,然後張貼內容的PHP文本編碼

更準確地說,當utf-8中的一個解釋爲ISO-9959-1或至少這就是我的瀏覽器所做的,如果我設置爲以utf-8查看頁面,那麼會產生?我看到ó,如果我將瀏覽器設置爲在ISO-9959-1中查看頁面,那麼我會看到ó,其他編碼會生成不同的符號。

我試圖轉換頁面的結果,並且將特定的字符串轉換爲utf-8,我也嘗試將頭文件設置爲僅接受utf-8,但那也不起作用。我很確定這是問題,但我正在用盡想法。我改變了php.ini中的配置,但也許我沒有重新啓動,基本上這就像在黑暗中拍攝,一些幫助將不勝感激。

如果這有助於:具體的代碼是在這裏:https://github.com/trylks/golem/blob/master/php/copperGolem.php

的方法是「形」,獲得從GET先前獲得頁面的參數值之一時。

謝謝。

PD解決了:在過去的幾個小時裏我一直在研究這個問題,我不知道我是否改變了許多其他必要的事情。在任何情況下,使其工作的最後一項變更是將第60行更改爲:$dom->loadHTML(mb_convert_encoding($p, 'html-entities', mb_detect_encoding($p)));就是這樣。問題不是libcurl,而是DomDocument,如下所述:PHP DomDocument failing to handle utf-8 characters (☆)

+0

這是否幫助? [在Web應用程序中處理Unicode前面](http://kunststube.net/frontback/) – deceze

+0

請參閱:http://stackoverflow.com/questions/649480/curl-import-character-encoding-problem – fyrye

+0

@fyrye遞歸如何在這裏幫助? – deceze

回答

0

問題出在DomDocument,它沒有正確處理utf-8。轉換爲html實體是最安全的選擇,當使用echo(甚至使用cli)輸出這些字符或對這些字符進行urlen編碼時,它的作用就像是魔術般的。基本上DomDocument不接受utf-8,但它輸出utf-8,或者看起來如此。所以這是一個奇怪的轉換,因此DomDocument將其解除,一切又恢復正常。

要做到這一點,並且是$dom一個DOMDocument這足以做到這一點在每次調用$dom->loadHTML($p)

$dom->loadHTML(mb_convert_encoding($p, 'html-entities', mb_detect_encoding($p)));

這是在這個其他問題解釋的更好:PHP DomDocument failing to handle utf-8 characters (☆)