DOMDocument with XPath Encoding


DOMDocument with XPath Encoding

$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?

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

编码DOMDocument::loadHTML()

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

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

笔记:

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

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

  • PHP DomDocument 无法处理 utf-8 字符 (☆(

它很可能会向您展示如何加载 HTML。它还更详细地解释了这一点。如果它不能解决您的问题,请告诉我。