2017-03-13 8 views
0

と私はHTML 5文書とPHPののDOMDocumentクラスを使用しています。しかし、私がすると、utf-8文字の一部が「変更されました」。私は ’éなどを持っています。PHPのDOMDocument loadHTML UTF-8エンコーディングを正しくHTML5のDOCTYPE

ここに私のコードです。

$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()); 

私は文字セットメタタグ<meta http-equiv="Content-Type" content="text/html; charset=utf-8">を追加する場合それはとても<meta charset=utf-8">

のようなmeta要素とHTML5のDOCTYPEように見える、OKであると思われます。

これは適切な解決策だと思いますか?

答えて

1

理由が見つかりました。

DOM拡張は、HTML 4用にHTMLパーサが作成されたlibxml2上に構築されました。<meta charset="utf-8"> HTMLコードのようなメタ要素は、ISO-8859と解釈され、非ASCII文字が変換されますHTMLエンティティに変換します。 HTML4のようなバージョンが動作するただし

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

参考:UTF-8 with PHP DOMDocument loadHTML?

関連する問題