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 编码。如果我进行转换,它甚至不会显示任何内容,但如果我不转换,它不会显示正确的字符。

任何的想法 ?据我所知,mb_* 不支持 gbk?

4

1 回答 1

1

DOMDocument::loadHTML()方法不需要 UTF-8 编码的字符串。所以你可以说它是 DOM 扩展中许多其他方法的一个例外,因为所有这些方法都需要一个UTF -8 编码的字符串。顺便说一句。适用于所有关心从文件、远程位置或字符串加载 XML/HTML 数据的 DOM 扩展方法。它们遵循不同且更复杂的字符串编码规则。

编码DOMDocument::loadHTML()

如果您传入的 HTML 字符串不包含任何编码提示(例如,在元标记内),则字符串的编码必须是 Latin-1。

如果字符串确实有编码提示,那么它需要采用该提示编码,并且需要是受支持的编码之一。

笔记:

  • 我不知道是否存在支持的编码列表。
  • 由于您没有显示您在其中加载的 HTML 代码,因此我不能说它是否包含有关编码的提示。
  • 我不知道是否DOMDocument::loadHMTL()存在使用 HTML 提示编码的所有受支持方法的列表。

但是:有关如何加载特定编码的 HTML 文档或片段的示例,请参阅我的相关答案:

它很可能会向您展示如何加载 HTML。它还更详细地解释了这一点。让我知道它是否不能解决您的问题。

于 2013-07-13T10:43:44.320 回答