
12.12.2007, 21:01
|
|
Постоянный
Регистрация: 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 функции не мои
|
|
|