Перекодировние в UTF8

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 26 фев 2010.

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

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    Здравствуйте.
    В переменной $text, текст неизвестной кодировки.
    Можно ли как-то перекодировать его в UTF8, не зная кодировку, и учитывая то, что кодировка уже может быть UTF8.
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    например если точно известно, что текст на русском, то можно перекодировать из списка кодировок в утф и посмотреть есть ли в перекодированном тексте кириллица, если есть значит кодировка найдена.
    PHP:
    //$test = file_get_contents('test2.txt');
    $test "текст непонятный";
    if(
    preg_match('/[а-яё]+$/iu'$test)){
        echo 
    "кодировка:UTF-8<br>";
    }else{
        
        
    $c = array("UTF-8""ASCII""Windows-1251""ISO-8859-1");
        
    $text "";
        foreach (
    $c as $i){
            
    $text_new iconv($i"UTF-8"$test);
            
    $text .= $i."->UTF-8:".$text_new."<br>";
            if (
    preg_match('/[а-яё]+$/iu'$text_new)){
                echo 
    "кодировка:".$i."<br>";
            }
        }
        
        echo 
    $text;
    }
     
  3. stasdre

    stasdre Постоялец

    Регистр.:
    15 янв 2010
    Сообщения:
    125
    Симпатии:
    18
    Можно проще открываешь свой скрипт в Notepad ++ и сохраняешь в кодировке utf-8 без без BOM:)
     
  4. egis2009

    egis2009 Создатель

    Регистр.:
    2 июн 2009
    Сообщения:
    22
    Симпатии:
    2
    я для этого использую dreamweaver с ним проблем никогда нет. Всегда сохранял из любой кодировки в utf нормально
     
  5. Delayer

    Delayer Создатель

    Регистр.:
    4 июл 2009
    Сообщения:
    39
    Симпатии:
    4
    а еще есть классная штучка:
    PHP:
    mb_convert_variables('utf8''auto'$text);
    но перед этим проверяем чтобы модуль mbstring был установлен в пхп
     
  6. lungsmoney

    lungsmoney Постоялец

    Регистр.:
    25 апр 2008
    Сообщения:
    81
    Симпатии:
    23
    я так себе помогаю;)
    например:cp-1251 -> в utf-8
    PHP:
    mb_internal_encoding('utf-8');
     
    $work_ut file_get_contents("baza_name.sql");
     
    $work_ut mb_convert_encoding($work_ut'utf-8''cp-1251');
     
    file_put_contents ("baza_name.sql"$work_ut)
     
  7. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    А читать ТС не пробовал?
    Ведь задача четко стоит перекодировать из неизвестной колировки...
    PS Да и вообще чем iconv не устраивает?
     
  8. Saer_lg

    Saer_lg Писатель

    Регистр.:
    22 фев 2010
    Сообщения:
    6
    Симпатии:
    0
    как вариант, если нет, то, что-то умное придумывать и сравнивать несколько кодировок...


    $subject = "abcdefывапывапыв"; // Ваша строка
    $pattern = '/[а-яА-Я]+/'; // шаблон
    preg_match($pattern, $subject, $matches);
    if ( sizeof($matches) >0 ) {
    //есть кириллица
    }
     
  9. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    И чё?
    Кириллица может быть минимум в 4-х кодировках.
    Да и регулярка левая - не выкупит кирилицу в юникоде.
     
  10. Saer_lg

    Saer_lg Писатель

    Регистр.:
    22 фев 2010
    Сообщения:
    6
    Симпатии:
    0
    вот еще откопал на винте интересный вариант...

    PHP:
    define('LOWERCASE',3);
       
    define('UPPERCASE',1);
       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']+=LOWERCASE;
               if ((
    $char 127 && $char 160)) $charsets['d']+=UPPERCASE;

               
    //KOI8-R
               
    if (($char 191 && $char 223)) $charsets['k']+=LOWERCASE;
               if ((
    $char 222 && $char 256)) $charsets['k']+=UPPERCASE;

               
    //WIN-1251
               
    if ($char 223 && $char 256$charsets['w']+=LOWERCASE;
               if (
    $char 191 && $char 224$charsets['w']+=UPPERCASE;

               
    //MAC
               
    if ($char 221 && $char 255$charsets['m']+=LOWERCASE;
               if (
    $char 127 && $char 160$charsets['m']+=UPPERCASE;

               
    //ISO-8859-5
               
    if ($char 207 && $char 240$charsets['i']+=LOWERCASE;
               if (
    $char 175 && $char 208$charsets['i']+=UPPERCASE;

           }
           
    arsort($charsets);
           return 
    key($charsets);
       }
     
Статус темы:
Закрыта.