【问题标题】:DOMDocumtent dose not convert the LoadHTML into UTF-8 [closed]DOMDocument 不会将加载 HTML 转换为 UTF-8 [关闭]
【发布时间】:2012-11-05 20:27:15
【问题描述】:

据我了解,loadHTML 默认加载拉丁语 1 的内容,我想将其转换为 UTF-8 字符。代码如下:

    // get data from website
    function get_url_contents($url){

            $crl = curl_init();
            $timeout = 5;
            curl_setopt ($crl, CURLOPT_ENCODING, 'UTF-8');
            curl_setopt ($crl, CURLOPT_URL,$url);
            curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);        
            curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
            $ret = curl_exec($crl);
            curl_close($crl);
            return $ret;
    }

// Now here is the domdoc
function get_all_meta_tags($html){

    $html = get_url_contents($html);

    $doc = new DOMDocument('1.0', 'UTF-8');

    $doc->encoding = 'UTF-8';

    $nodes = $doc->getElementsByTagName('title');
    $title = $nodes->item(0)->nodeValue;
    $arr['title']=$title;

    $nodes = $doc->getElementsByTagName('h1');
    $h1 = $nodes->item(0)->nodeValue;
    $arr['h1']=$h1;

    $metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$mt = $metas->item($i);

if($mt->getAttribute('name')=='description')
$dec=$mt->getAttribute('content');$arr['description']=$dec;
if($mt->getAttribute('name')=='keywords')
$key=$mt->getAttribute('content');$arr['keywords']=$key;
}
return $arr;
}

现在你可以看到我从网页中抓取数据,问题是这个词没有转换成 UTF-8。例如“Az utolsó dal”需要蜜蜂“Az utolsó dal”。有人可以指导我解决问题或解决方案吗?

【问题讨论】:

  • 该代码无法运行。您根本没有将网站的内容加载到 DOMDocument 中。顺便说一句,这里不需要使用 cURL,因为 DOMDocument 有一个 loadHTMLFile 方法。
  • 在@Gordon 写的内容旁边,您使用CURLOPT_ENCODING 完全错误(到目前为止,现有的“答案”都没有涵盖这一点)。多注意你所做的事情。你需要做一些不同的事情来检查你从 curl 返回的 HTML 的编码。 get curl respone encoding

标签: php html


【解决方案1】:

有一个 hack 可以强制 HTML 文档使用 UTF-8,只需将它们读取为 XML:

$dom->loadHTML( '<?xml encoding="UTF-8">' . $content );

你的情况:

$html = get_url_contents($html);

// this is necessary to prevent DOMDocument errors on HTML5-elements
libxml_use_internal_errors( true );

$doc = new DOMDocument();

// UTF-8 hack, to correctly handle UTF-8 through DOMDocument
$doc->loadHTML( '<?xml encoding="UTF-8">' . $html );

【讨论】:

    【解决方案2】:

    在创建 Dom 文档之前进行编码。

           $html = get_url_contents($html);
           utf8_encode($html);
    

    【讨论】:

      【解决方案3】:

      检查脚本的编码...应该是 utf8。

      为此,您可以使用 notepad++,并将您的脚本转换为 UTF8 而无需 BOM。

      您可以使用 mb_internal_encoding() 来检查您的内部编码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-18
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-19
        • 1970-01-01
        相关资源
        最近更新 更多