我从一个网站抓取了一些信息。因此,我创建了一个新的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
}
}
您的问题根本不是UTF-8。HTML中的每个URL都应该是URL编码的。当您获取<a href>
的值时,您将获取编码形式的URL。如果要查看unicode字符,必须将URL解码为字符串形式。使用urldecode()
echo urldecode($node->nodeValue);