$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。它还更详细地解释了这一点。如果它不能解决您的问题,请告诉我。