文档字符集问题


domdocument character set issue

这是女巫的视频,我想得到og:title

http://www.youtube.com/watch?feature=player_embedded&v=A683kmvRH_8

菲律宾代码

function file_get_contents_curl($url){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            $data = curl_exec($ch);
            curl_close($ch);
            return $data;
        }
        $html = file_get_contents_curl($pageurl);
        $doc = new DOMDocument();
        @$doc->loadHTML($html);
        $nodes = $doc->getElementsByTagName('title');
        $titleBackUp = $nodes->item(0)->nodeValue;
        $metas = $doc->getElementsByTagName('meta');
        for ($i = 0; $i < $metas->length; $i++){
            $meta = $metas->item($i);
            if($meta->getAttribute('name') == 'title')
                $title = $meta->getAttribute('content');
        }

标题是 Мастило - В ръцете ти е най-добре [HQ] 我得到了

ÐаÑÐ ̧лÐ3/4 - Ð

ÑÑÑÐμ ÑÐ ̧ Ðμ Ð1/2ай-Ð'Ð3/4бÑÐμ [总部]

我也尝试

 curl_setopt( $ch, CURLOPT_ENCODING, "UTF-8" );

但它确实有效。

我尝试使用html_entity_decode但不起作用

如果文档本身不包含<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />标记,则可能会发生这种情况。

您可以尝试以下任一操作:

  1. DomDocument直接从服务器加载 HTML(即使用 ->loadHTMLFile()

  2. 在文档通过 ->loadHTML() 运行之前,使用上述元标记作为文档前缀。

例如,您可以执行以下操作:

libxml_use_internal_errors(true);
$doc->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . $html);
libxml_clear_errors();

让 libxml 知道它应该读取 utf-8 数据是一种黑客......无法通过 ->loadHTML() 传递该编码。