Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > KOI8-R vs Windows-1251


Автор: ScoDi 30.5.2005, 14:24
Как определить в какой кодировке находиться текстовый файл?(может появилось что-то свежие в PHP5 для этого)

Автор: Mal Hack 30.5.2005, 16:32
Можно попробовать через iconv();
НО
Код
    function detect_cyr_charset($str)
    {
        $charsets = Array( 
                        'k' => 0, 
                        'w' => 0, 
                        'd' => 0, 
                        'i' => 0, 
                        'm' => 0 
                         ); 
        for ($i = 0, $length = strlen($str); $i < $length; $i++) { 
            $char = ord($str[$i]);
            //non-russian characters
            if ($char < 128 || $char > 256) continue; 
            //cp866
            if (($char > 159 && $char < 176) || ($char > 223 && $char < 242)) $charsets['d'] += 3; 
            if (($char > 127 && $char < 160)) $charsets['d'] += 1; 
            //koi8-r
            if (($char > 191 && $char < 223)) $charsets['k'] += 3; 
            if (($char > 222 && $char < 256)) $charsets['k'] += 1; 
            //win-1251
            if ($char > 223 && $char < 256) $charsets['w'] += 3; 
            if ($char > 191 && $char < 224) $charsets['w'] += 1; 
            //mac
            if ($char > 221 && $char < 255) $charsets['m'] += 3; 
            if ($char > 127 && $char < 160) $charsets['m'] += 1; 
            //iso-8859-5
            if ($char > 207 && $char < 240) $charsets['i'] += 3; 
            if ($char > 175 && $char < 208) $charsets['i'] += 1; 
        } 
        arsort($charsets); 
        return key($charsets);
    }

Выдрано отсюда:
http://forum.vingrad.ru/index.php?showtopic=4632&view=findpost&p=93370

Автор: Irokez 30.5.2005, 16:47
а кто может мне по-научному объяснить как эта функция работает smile точнее меня интересует, откуда эти загадочные числа взялись? (128, 256, 127, 160 ...)

Автор: Mal Hack 30.5.2005, 16:57
ASCII коды.

Автор: Irokez 30.5.2005, 21:12
Цитата(Mal @ 30.5.2005, 16:57)
ASCII коды.

хм.. а поподробнее про сами числа? откуда они взялись?
интуитивно догадываюсь, что в разных кодировках русские символы занимают разные позиции в ASCII таблице, это так?
а почему прибавляем то 3 то 1?

Автор: Mal Hack 30.5.2005, 21:32
Цитата(Irokez @ 30.5.2005, 22:12)
а почему прибавляем то 3 то 1?

Я думаю, что это заглавгные или строчные буквы... Хотя голова сегодня туго соображает.

Цитата(Irokez @ 30.5.2005, 22:12)
интуитивно догадываюсь, что в разных кодировках русские символы занимают разные позиции в ASCII таблице, это так?

Да.

Автор: Irokez 30.5.2005, 21:35
Цитата(Mal @ 30.5.2005, 21:32)
Я думаю, что это заглавгные или строчные буквы... Хотя голова сегодня туго соображает.

хм.. а почему тогда заглавные буквы увеличивают вероятность в три раза больше чем строчные? кто-нибудь знает автора сей функции?

Автор: Mal Hack 30.5.2005, 21:45
Я тут подумал, я думаю что это флаги !!! Аля CHMOD.

Автор: versus 30.5.2005, 21:47
Цитата(Irokez @ 30.5.2005, 21:35)
кто-нибудь знает автора сей функции?

Говорят что это он/она/они:
http://tony2001.phpclub.net/misc/detect_charset/

Автор: Mal Hack 30.5.2005, 21:51
У меня WIN, как MAC определила smile))

Автор: Irokez 30.5.2005, 21:53
Цитата(Mal @ 30.5.2005, 21:51)
У меня WIN, как MAC определила smile))

а ты в браузере поставь win1251
Добавлено @ 21:55
Цитата(Mal @ 30.5.2005, 21:45)
Я тут подумал, я думаю что это флаги !!! Аля CHMOD.

поподробнее, поподробнее, автора пока нет, будем раскрывать алгоритм совместными силами smile

Автор: Mal Hack 30.5.2005, 21:56
Цитата(Irokez @ 30.5.2005, 22:53)
а ты в браузере поставь win1251

Стоит...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)