使用 PHP 加载 UTF-8 编码的 HTML 站点

Posted

技术标签:

【中文标题】使用 PHP 加载 UTF-8 编码的 HTML 站点【英文标题】:Load UTF-8 encoded HTML site with PHP 【发布时间】:2021-06-06 08:27:56 【问题描述】:

我从一个网站上抓取一些信息。因此,我创建了一个新的 DOM 文档并使用 loadhtmlFile 加载网站。 现在我遇到的问题是我正在抓取的网站使用撇号/法语口音。我读到loadHTMLFile 默认不使用 UTF-8 编码。

所以我尝试手动添加 UTF-8 编码,但它不起作用。撇号仍然无法正确显示。

例如,字母ì(带撇号)显示为%C3%AC。没有撇号的单词可以正确显示。

这是完整的代码:

header('Content-Type: text/html; charset=utf-8');

foreach (range(0, 50) as $number) 

$url = 'https://www.xxyyy.com/' . $number . '';
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTMLFile(mb_convert_encoding($url, 'HTML-ENTITIES', 'UTF-8'));
$dom->substituteEntities = true;
$xpath = new DOMXPath($dom);

$content = $xpath->query("//a[contains(@href,'character')]/@href");

    foreach ($content as $node) 

      echo $node->nodeValue
    

【问题讨论】:

【参考方案1】:

您的问题根本不是 UTF-8。 HTML 中的每个 URL 都应该进行 URL 编码。当您获取 <a href> 的值时,您会获取编码形式的 URL。如果要查看 unicode 字符,则必须将 URL 解码为其字符串形式。使用urldecode()

echo urldecode($node->nodeValue);

【讨论】:

以上是关于使用 PHP 加载 UTF-8 编码的 HTML 站点的主要内容,如果未能解决你的问题,请参考以下文章

PHP怎么把经过UTF-8编码的中文字符转换成正常的中文

3-PHP全部编码UTF-8

HTML 和 PHP cURL 响应 utf-8 编码问题

php 多语言(UTF-8编码)导出ExcelCSV乱码解决办法之导出UTF-8编码的ExcelCSV

PHP项目的文件编码

php用UTF-8编码 报错提示或者用函数获取路径时!路径中的中文是乱码