2

PHP:: 如何使用简单的html dom 解析器(utf-8、windows-255 等)获取网页的字符集值?

备注:必须使用 html dom 解析器http://simplehtmldom.sourceforge.net

Example1 网页字符集输入:

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

结果:utf-8



Example2 网页字符集输入:

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

结果:windows-255

编辑:

我试试这个(但它不起作用):

$html = file_get_html('http://www.google.com/');
$el=$html->find('meta[content]',0);
echo $el->charset; 

应该改变什么?(我知道 $el->charset 不起作用)

谢谢

4

3 回答 3

3

您必须使用正则表达式匹配字符串(我希望您有 PCRE ...)。

$el=$html->find('meta[http-equiv=Content-Type]',0)
$fullvalue = $el->content;
preg_match('/charset=(.+)/', $fullvalue, $matches);
echo $matches[1];

不是很健壮,但应该可以工作。

于 2010-07-28T18:29:35.223 回答
2
$dd = new DOMDocument;
$dd->loadHTML($data);
foreach ($dd->getElementsByTagName("meta") as $m) {
    if (strtolower($m->getAttribute("http-equiv")) == "content-type") {
        $v = $m->getAttribute("content");
        if (preg_match("#.+?/.+?;\\s?charset\\s?=\\s?(.+)#i", $v, $m))
            echo $m[1];
    }
}

请注意,DOM 扩展将所有数据隐式转换为 UTF-8。

于 2010-07-28T18:30:15.050 回答
1

感谢 MvanGeest 的回答 - 我只是修复了一点,它的工作很完美。

$html = file_get_html('http://www.google.com/');
$el=$html->find('meta[content]',0);
$fullvalue = $el->content;
preg_match('/charset=(.+)/', $fullvalue, $matches);
echo substr($matches[0], strlen("charset="));
于 2010-07-28T18:48:46.463 回答