Получить значение кодировки страницы из тега

Имеется строка, которая содержит в себе мета-тег кодировки страницы, это может быть UTF-8, Windows-1251, KOI8-R и другие.

meta-тег в зависимости от ситуации имеет разный вид, в нем не всегда может присутствовать явное указание кодировки.

В данной ситуации meta-тег выглядит следующим образом:

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

Каким способом можно через PHP вытащить значение charset в мета-теге, если оно присутствует? Мне необходимо получить только содержимое тега charset, в данной ситуации я хочу получить строку с содержанием "koi8-r".

P.S - хочу уточнить, что решение через DOM PHP мне не подходит, желательно использовать регулярное выражение.


Ответы (1 шт):

Автор решения: Александр Сычёв

Может такой вариант? Протестировал на UTF-8, Windows-1251, KOI8-R

$str = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
preg_match('/charset=(.*)"/', $str, $matches);
print_r($matches[1]);

Если нужно еще учитывать такой вариант <meta charset="utf-8">

$str = '<meta http-equiv="Content-Type" content="text/html;charset=koi8-r">';
$str2 = '<meta charset="Utf-8">';
if (preg_match('/charset="*(.*)"/', $str2, $matches)) {
print_r($matches[1]);
} else {
print_r("кодировка не установлена");}

P.S: Если еще пробелы и одинарные кавычки нужно учесть:

$str = '<meta http-equiv="Content-Type" content="text/html;charset=utf - 8">';
$str2 = "<meta charset='Utf-8'>";
$result = preg_replace("/\s+/", "", $str); //удаляем пробелы в строке
if (preg_match('/charset=[\'"]*(.+)[\'"]+/', $result, $matches)) {
print_r($matches[1]);
}
else {
print_r("кодировка не установлена");}
→ Ссылка