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

  #2  
Старый 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 функции не мои
 
Ответить с цитированием