[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярное выражение определения кодировки докумен
DZHETIGAPA
Есть регулярное выражение определения кодировки документа:


@<meta[^>]+http-equiv\\s*=\\s*(["|\'])Content-Type\\1([^>]+?)>@i


Но оно работает, если тег мета выглядит так:

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

Если же тег мета имеет немного другой вид, то регулярка не работает:

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


Как составить правильно регулярку для второго случая?
Arh
Возможно так

$tpl = '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">';
preg_match('!charset=(.*?)"!i',$tpl,$charset);
print_r($charset);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
killer8080
DZHETIGAPA
в html5 кодировка задается иначе, а вообще правильней её брать из http заголовков.
DZHETIGAPA
Тут дело даже не в поиске кодировки. Я сам потом пихаю мету кодировки в нужный документ или заменяю ее.


$str = '<meta content="text/html;charset=WINDOWS-1251" http-equiv="Content-Type">';
preg_match('@\s*<meta[^>]+[.^\>]*charset=(["|\']{0,1}.*?["|\']{1})\s*([^>]?)>@i', $str, $matches);
print_r($matches);


В выводе:


Array ( [0] => [1] => WINDOWS-1251" http-equiv="Content-Type" [2] => )


Не получается найти только WINDOWS-1251. Он все захватывает.
killer8080
$str = '<meta content="text/html;charset=WINDOWS-1251" http-equiv="Content-Type"> 
<meta charset="utf-8" />'
;
preg_match_all('#<meta[^>]+charset=(?:"|\')?([\w-]+)[^>]*>#i', $str, $matches);
echo '<pre>'.htmlspecialchars(print_r($matches,1)).'</pre>';

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

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.