Показать сообщение отдельно

  #1192  
Старый 12.12.2007, 21:01
Macro
Постоянный
Регистрация: 11.11.2006
Сообщений: 595
С нами: 10261766

Репутация: 1079


По умолчанию

Цитата:
Сообщение от eXp  
А как перевести из utf-8 в cp1251? C помощью convert_cyr_string() не получается =\
PHP код:
<?
function Utf8ToWin($fcontents) {
    
$out = $c1 = \;
    
$byte2 = false;
    for (
$c = 0;$c < strlen($fcontents);$c++) {
        
$i = ord($fcontents[$c]);
        if (
$i <= 127) {
            
$out .= $fcontents[$c];
        }
        if (
$byte2) {
            
$new_c2 = ($c1 & 3) * 64 + ($i & 63);
            
$new_c1 = ($c1 >> 2) & 5;
            
$new_i = $new_c1 * 256 + $new_c2;
            if (
$new_i == 1025) {
                
$out_i = 168;
            } else {
                if (
$new_i == 1105) {
                    
$out_i = 184;
                } else {
                    
$out_i = $new_i - 848;
                }
            }
            
$out .= chr($out_i);
            
$byte2 = false;
        }
        if ((
$i >> 5) == 6) {
            
$c1 = $i;
            
$byte2 = true;
        }
    }
    return 
$out;
}

?>

ИЛИ

PHP код:
<?php
function UTF8toCP1251($str){ // by SiMM, $table from http://ru.wikipedia.org/wiki/CP1251
  
static $table = array("\xD0\x81" => "\xA8", // Ё
                        
"\xD1\x91" => "\xB8", // ё
                        // украинские символы
                        
"\xD0\x8E" => "\xA1", // Ў (У)
                        
"\xD1\x9E" => "\xA2", // ў (у)
                        
"\xD0\x84" => "\xAA", // Є (Э)
                        
"\xD0\x87" => "\xAF", // Ї (I..)
                        
"\xD0\x86" => "\xB2", // I (I)
                        
"\xD1\x96" => "\xB3", // i (i)
                        
"\xD1\x94" => "\xBA", // є (э)
                        
"\xD1\x97" => "\xBF", // ї (i..)
                        // чувашские символы
                        
"\xD3\x90" => "\x8C", // Ӑ (А)
                        
"\xD3\x96" => "\x8D", // Ӗ (Е)
                        
"\xD2\xAA" => "\x8E", // Ҫ (С)
                        
"\xD3\xB2" => "\x8F", // Ӳ (У)
                        
"\xD3\x91" => "\x9C", // ӑ (а)
                        
"\xD3\x97" => "\x9D", // ӗ (е)
                        
"\xD2\xAB" => "\x9E", // ҫ (с)
                        
"\xD3\xB3" => "\x9F", // ӳ (у)
                       
);
  return 
preg_replace(#([\xD0-\xD1])([\x80-\xBF])#se,
                      
isset($table["$0"]) ? $table["$0"] :
                       
chr(ord("$2")+("$1" == "\xD0" ? 0x30 : 0x70))
                      ,
                      
$str
                     
);
}
?>
PS функции не мои
 
Ответить с цитированием