PHP- HTML-разбор :: Как можно получить значение кодировки веб-страницы с помощью простого html dom-парсера? - PullRequest
2 голосов
/ 28 июля 2010

PHP :: Как определить значение кодировки веб-страницы с помощью простого html dom-парсера (utf-8, windows-255 и т. Д.)?

примечание: это нужно сделать с помощью html dom parser http://simplehtmldom.sourceforge.net

Пример1 ввода кодировки веб-страницы:

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

Результат: UTF-8



Пример2 ввода кодировки веб-страницы:

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

результат: окна-255

Edit:

Я пытаюсь это (но это не работает):

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

Что должно быть изменено? (Я знаю, что $ el-> charset не работает)

Спасибо

Ответы [ 3 ]

3 голосов
/ 28 июля 2010

Вам нужно будет сопоставить строку с помощью регулярного выражения (надеюсь, у вас есть PCRE ...).

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

Не очень устойчиво, но должно работать.

2 голосов
/ 28 июля 2010
$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.

1 голос
/ 28 июля 2010

Спасибо за ответ 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="));
...