2013-07-03 38 views
0
$convertedhtml = urlencode(mb_convert_encoding($htmlcode,'UTF-8',"auto")); 
$doc = new DOMDocument(); 
$doc->loadHTML($convertedhtml); 

$xpath = new DOMXpath($doc); 
$elements = $xpath->query("//*[@id='detail']/div[1]/h3/text()"); 
$elements->item(0)->nodeValue; 

return ($elements->item(0)->nodeValue); 

網站使用gbk編碼。如果我做轉換,它甚至不會顯示任何東西,但如果我不轉換,它不顯示正確的字符。使用XPath編碼的DOMDocument

有什麼想法?據我所知,mb_ *不支持gbk?

+0

http://stackoverflow.com/questions/3265824/php-utf-8-to-gb2312 – Rikesh

+0

@Rikesh GBK UTF,因爲XPath需要它在UTF-8? – CodeGuru

回答

1

DOMDocument::loadHTML() method不指望UTF-8編碼的字符串。所以你可以說這是DOM擴展中許多其他方法的一個例外,因爲所有那些期望 UTF-8編碼的字符串。同樣btw。適用於所有關於從文件,遠程位置或字符串中加載XML/HTML數據的DOM擴展方法。它們遵循不同的和更復雜的字符串編碼規則。

DOMDocument::loadHTML()編碼:

如果你在那裏所出的HTML字符串不包含在編碼任何提示(如內部元標籤),則該字符串的編碼必須是拉丁語1。

如果字符串確實有暗示的編碼,那麼它需要在暗示編碼,並且需要一個支持的編碼。

注:

  • 我不知道是否存在支持的編碼清單。
  • 由於您不會顯示您在其中加載的HTML代碼,因此我不能說它是否包含對編碼的提示。
  • 我不知道是否存在支持DOMDocument::loadHMTL()的所有HTML編碼提示方式的列表。

不過:有關如何加載特定的編碼的HTML文檔或片段的例子看我的這個相關答案:

它很可能會告訴你如何你可以加載你的HTML。它也更詳細地解釋了這一點。讓我知道如果它不能解決您的問題。