PHP DOMDocument使用HTML5 doctype正确加载HTML UTF-8编码

PHP DOMDocument使用HTML5 doctype正确加载HTML UTF-8编码,php,html,encoding,utf-8,character-encoding,Php,Html,Encoding,Utf 8,Character Encoding,我将PHP的DOMDocument类与HTML5文档一起使用。但当我这样做时,一些utf-8字符被“更改”。我得到了&ensp,,é等 这是我的密码 $parsedUrl = 'http://www.futursparents.com/'; $curl = curl_init(); @curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => 1, CURLO

我将PHP的DOMDocument类与HTML5文档一起使用。但当我这样做时,一些utf-8字符被“更改”。我得到了
&ensp
é

这是我的密码

    $parsedUrl = 'http://www.futursparents.com/';

    $curl = curl_init();
    @curl_setopt_array($curl, [
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_TIMEOUT => 60,
            CURLOPT_CONNECTTIMEOUT => 30,
            CURLOPT_FOLLOWLOCATION => TRUE,
            CURLOPT_MAXREDIRS => 5,
            CURLOPT_AUTOREFERER => FALSE,
            CURLOPT_HEADER => TRUE, // FALSE
            CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
            CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
            CURLOPT_CERTINFO => TRUE,
            CURLOPT_LOW_SPEED_LIMIT => 200,
            CURLOPT_LOW_SPEED_TIME => 50,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_PROXYTYPE => CURLPROXY_HTTP,
            CURLOPT_ENCODING => 'gzip,deflate',
            CURLOPT_URL => $parsedUrl,
        ]);
    $response = curl_exec($curl);
    $info = curl_getinfo($curl);
    $error = curl_error($curl);
    $headers = trim(substr($response, 0, curl_getinfo($curl, CURLINFO_HEADER_SIZE)));
    $content = substr($response, curl_getinfo($curl, CURLINFO_HEADER_SIZE));

    curl_close($curl);

    libxml_use_internal_errors(true);

    $domDoc = new DOMDocument();
    print_r($domDoc->encoding); // It's OK => UTF-8
    // Got   or s’ or &eacute etc....
    print_r($domDoc->saveHTML());
它似乎是一个HTML5 doctype,带有一个元元素,比如so
,我找到了原因

DOM扩展是在libxml2上构建的,libxml2的HTML解析器是为HTML4制作的。如果HTML5 doctype和元元素(如so
HTML代码)将被解释为ISO-8859,则非ASCII字符将被转换为HTML实体

但是,类似HTML4的版本可以工作

参考资料:

我找到了原因

DOM扩展是在libxml2上构建的,libxml2的HTML解析器是为HTML4制作的。如果HTML5 doctype和元元素(如so
HTML代码)将被解释为ISO-8859,则非ASCII字符将被转换为HTML实体

但是,类似HTML4的版本可以工作

参考:

$domDoc->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $content);
// No &ensp; or s&rsquo; or &eacute etc....
print_r($domDoc->saveHTML());