Php 刮削时的字体或Unicode问题

Php 刮削时的字体或Unicode问题,php,html,xpath,web-scraping,domdocument,Php,Html,Xpath,Web Scraping,Domdocument,我试图从一个网站上获取信息 网站有这样的功能 127 East Zhongshan No 2 Rd; 中山东二路127号 但是,当我试图放弃它&回应它时,它就会显示出来 127 East Zhongshan No 2 Rd; 中山ä¸äºè·¯127å· 我也尝试UTF-8 这是我的php代码 现在请帮我解决这个问题 function GrabPage($site){ $ch = curl_init(); curl_setopt($ch, CURLOPT_RETUR

我试图从一个网站上获取信息

网站有这样的功能

127 East Zhongshan No 2 Rd; 中山东二路127号
但是,当我试图放弃它&回应它时,它就会显示出来

127 East Zhongshan No 2 Rd; 中山ä¸äºè·¯127å· 
我也尝试UTF-8

这是我的php代码

现在请帮我解决这个问题

function GrabPage($site){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_TIMEOUT, 40);
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_URL, $site);
    ob_start();
    return curl_exec ($ch);
    ob_end_clean();
    curl_close ($ch);
}
$GrabData   = GrabPage($site);

$dom    = new DOMDocument();
@$dom->loadHTML($GrabData);

$xpath  = new DOMXpath($dom);


$mainElements = array();
$mainElements = $xpath->query("//div[@class='col--one-whole mv--col--one-half wv--col--one-whole'][1]/dl/dt");

foreach ($mainElements as $Names2) {
    $Name2  = $Names2->nodeValue;
    echo "$Name2";
}

首先,您需要先设置字符集,然后再设置PHP文件上的任何内容:

header('Content-Type: text/html; charset=utf-8');
您需要转换使用
mb\u convert\u编码获得的html标记

@$dom->loadHTML(mb_convert_encoding($GrabData, 'HTML-ENTITIES', 'UTF-8'));

首先要看捕获的HTML源代码是否正确编码。如果是,试试看

utf8_decode($Name2)

这将使您的字符串做好保存和打印的准备

这是站点URL:loadHTML需要拉丁语1编码的数据,请参阅以获取详细信息。这里是一个带有
标记的HTML 5+文档。看起来这个标签并没有对文件编码撒谎,所以它是UTF-8。HTML0-4.x中的默认编码是ISO-8895-1。PHP中的DOMDocument需要HTML4.1。您也是对的。谢谢。这种方法会导致数据丢失。给出的答案不是一个好建议。@FerozAhmed Gald,它帮助了@哈克雷:你能详细说明一下使用这种方法是如何发生dat丢失的吗?UTF-8有更多的字符,utf8_解码的结果可以表达出来。对于所有那些无法表达的字符,都会发生丢失。@FerozAhmed当然很高兴这有帮助