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

Тема в разделе "PHP", создана пользователем ivashka, 21 ноя 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. ivashka

    ivashka

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

    myweb Среда обитания WEB

    Регистр.:
    10 сен 2007
    Сообщения:
    539
    Симпатии:
    246
    PHP:

    Распознавать win
    -1251 или koi8-r можно так:

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

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

    if( 
    $win &lt$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;
    }




    http://il2.php.net/manual/en/function.mb-detect-encoding.php


     
    ivashka нравится это.
  3. dazed

    dazed

    Регистр.:
    31 мар 2007
    Сообщения:
    208
    Симпатии:
    55
    советую посмотреть как работает функция charset_x_win:

    http://popoff.donetsk.ua/text/work/libs/a/charset/
     
  4. Avtandil

    Avtandil Создатель

    Регистр.:
    30 сен 2006
    Сообщения:
    30
    Симпатии:
    24
    Ещё можно извлечь кодировку из заголовков документа. Примерно вот так:
    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 
    'Кодировка явно не указана';
     
  5. Wentix

    Wentix Создатель

    Регистр.:
    26 авг 2008
    Сообщения:
    29
    Симпатии:
    14
    Более простой вариант:


    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');
    ?>
     
    Peregrinator нравится это.
Статус темы:
Закрыта.