узнать удаленно кодировку html документа

Статус
В этой теме нельзя размещать новые ответы.

ivashka

Полезный
Регистрация
16 Май 2007
Сообщения
151
Реакции
15
Как можно узнать кодировку веб страницы?
возможно такое что в charset ничего не прописано.
Но прошу привести функцию которая получает кодировку удаленного файла из charset, за это тоже большая благодарность...
Помогите пожалуйсто...
 
PHP:
Распознавать win-1251 или koi8-r можно так:

function Detect($str)
{
$win = 0;
$koi = 0;

for($i=0; $i<strlen($str); $i++)
{
if( ord($str[$i]) > 224 && ord($str[$i]) < 255) { $win++; }
if( ord($str[$i]) > 192 && ord($str[$i]) < 223) { $koi++; }
}

if( $win < $koi )
{ return 1; }
else
{ return 0; }

}



if (Detect($str)) { echo 'кодировка koi8-r'; }
else { echo 'кодировка windows-1251'; }

PHP:
function detect_my_utf($s){
 $s=urlencode($s); // в некоторых случаях - лишняя операция (закоментируйте)
 $res='0';
 $j=strlen($s);

 $s2=strtoupper($s);
 $s2=str_replace("%D0",'',$s2);
 $s2=str_replace("%D1",'',$s2);
 $k=strlen($s2);

 $m=1;
 if ($k>0){
  $m=$j/$k;
  if (($m>1.2)&&($m<2.2)){ $res='1'; }
 }
 return $res;
}

 
Ещё можно извлечь кодировку из заголовков документа. Примерно вот так:
PHP:
$host = 'mail.ru'; $path = '/';
$sock = fsockopen($host,80,$errno,$errstr,48);
if (!$sock) die("Socket error $errno: $errstr");
fputs($sock,"HEAD $path {$_SERVER['SERVER_PROTOCOL']}\r\n".
"Host: $host\r\n".
"Accept: {$_SERVER['HTTP_ACCEPT']}\r\n".
"Accept-Language: {$_SERVER['HTTP_ACCEPT_LANGUAGE']}\r\n".
"Accept-Charset: {$_SERVER['HTTP_ACCEPT_CHARSET']}\r\n".
"User-Agent: {$_SERVER['HTTP_USER_AGENT']}\r\n".
"Connection: close\r\n\r\n");
$headers = '';
do {
  $line = fgets($sock,512); $headers .= $line;
} while ($line!="\r\n" && !feof($sock));
fclose($sock);
if (eregi("Content-Type: ?([a-z/-]+); ?charset=([a-z0-9-]+)\r\n",$headers,$res))
  echo "Content-Type: $res[1]<br>\nCharset: $res[2]\n";
else echo 'Кодировка явно не указана';
 
Более простой вариант:


PHP:
<?php
function charset($w)
{
	$fp = fopen($w, 'r');
	$inf = stream_get_meta_data($fp);
	fclose($fp);
	foreach($inf['wrapper_data'] as $c){
		preg_match('#charset=(.*)#', $c, $x);
		if($x){ echo strtoupper($x[1]); }
	}
}

charset('http://ya.ru');
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху