Как я могу получить кодировку html веб-страницы из html как строку, а не как dom? - PullRequest
1 голос
/ 01 августа 2010

Как я могу получить кодировку html веб-страницы из html как строку, а не как dom?

Я получаю строку html вот так:

$html = file_get_contents($url);
preg_match_all (string pattern, string subject, array matches, int flags)

но я не знаю регулярных выражений, и мне нужно выяснить кодировку веб-страницы (UTF-8 / windows-255 / и т.д ..) Спасибо,

Ответы [ 3 ]

6 голосов
/ 01 августа 2010

preg_match ( '~ кодировок = ([- а-z0-9 _] +) ~ я', $ HTML, $ кодировок);

1 голос
/ 01 августа 2010

Прежде всего вы должны проверить заголовок Content-type.

//add error handling
$f = fopen($url, "r");
$md = stream_get_meta_data($f);
$wd = $md["wrapper_data"];
foreach($wd as $response) {
    if (preg_match('/^content-type: .+?/.+?;\\s?charset=([^;"\\s]+|"[^;"]+")/i',
             $response, $matches) {
         $charset = $matches[1];
         break;
    }
}
$data = stream_get_contents($f);

Затем вы можете использовать элемент meta.Ответ на этот вопрос был ранее здесь .

Более сложная версия парсинга заголовков, чтобы угодить аудитории:

if (preg_match('~^content-type: .+?/[^;]+?(.*)~i', $response, $matches)) {
    if (preg_match_all('~;\\s?(?P<key>[^()<>@,;:\"/[\\]?={}\\s]+)'.
            '=(?P<value>[^;"\\s]+|"[^;"]+")\\s*~i', $matches[1], $m)) {
        for ($i = 0; $i < count($m['key']); $i++) {
            if (strtolower($m['key'][$i]) == "charset") {
                $charset = trim($m['value'][$i], '"');
            }
        }
    }
}
0 голосов
/ 01 августа 2010

вы могли бы использовать

mb_detect_encoding($html);

но это вообще плохая идея.Лучше используйте вместо этого curl и посмотрите на заголовок Content-Type.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...