Конвертируем кирилицу

Категория: PHP Комментариев: 1

Букет PHP-функций с php.net для конвертации строк из одной кириллической кодировки в другую.

function win_to_utf8($str){
 $str = convert_cyr_string($str, 'w','i'); // w - windows-1251 to i - iso8859-5
 $str = utf8_encode ($str); // iso8859-5 to utf8
 return $str;
}
function utf8_to_win($str){
$str = utf8_decode ($str); // utf8 to iso8859-5
$str = convert_cyr_string($str, 'i','w'); // w - windows-1251 to i - iso8859-5
return $str;
} 
function win2utf($s){
 $c209 = chr(209); $c208 = chr(208); $c129 = chr(129);
 for($i=0; $i<strlen($s); $i++) {
 $c=ord($s[$i]);
 if ($c>=192 and $c<=239) $t.=$c208.chr($c-48);
 elseif ($c>239) $t.=$c209.chr($c-112);
 elseif ($c==184) $t.=$c209.$c209;
 elseif ($c==168) $t.=$c208.$c129;
 else $t.=$s[$i];
 }
 return $t;
}
function Encode ( $str, $type )
{
// $type:
// 'w' - encodes from UTF to win
// 'u' - encodes from win to UTF

 static $conv='';
 if (!is_array ( $conv ))
 {
 $conv=array ();
 for ( $x=128; $x <=143; $x++ )
 {
 $conv['utf'][]=chr(209).chr($x);
 $conv['win'][]=chr($x+112);
 }

 for ( $x=144; $x <=191; $x++ )
 {
 $conv['utf'][]=chr(208).chr($x);
 $conv['win'][]=chr($x+48);
 }
 $conv['utf'][]=chr(208).chr(129);
 $conv['win'][]=chr(168);
 $conv['utf'][]=chr(209).chr(145);
 $conv['win'][]=chr(184);
 }
 if ( $type=='w' )
 return str_replace ( $conv['utf'], $conv['win'], $str );
 elseif ( $type=='u' )
 return str_replace ( $conv['win'], $conv['utf'], $str );
 else
 return $str;
}
 function unicode_russian($str) {
 $encode = "";
 for ($ii=0;$ii<strlen($str);$ii++) {
 $xchr=substr($str,$ii,1);
 if (ord($xchr)>191) {
 $xchr=ord($xchr)+848;
 $xchr="&#" . $xchr . ";";
 }
 if(ord($xchr) == 168) {
 $xchr = "&#1025;";
 }
 if(ord($xchr) == 184) {
 $xchr = "&#1105;";
 }
 $encode=$encode . $xchr;
 }
 return $encode;
} 
function Utf8Win($str,$type="w")
{
 static $conv='';
 if (!is_array($conv))
 {
 $conv = array();
 for($x=128;$x<=143;$x++)
 {
 $conv['u'][]=chr(209).chr($x);
 $conv['w'][]=chr($x+112);
 }
 for($x=144;$x<=191;$x++)
 {
 $conv['u'][]=chr(208).chr($x);
 $conv['w'][]=chr($x+48);
 }
 $conv['u'][]=chr(208).chr(129); // Ё
 $conv['w'][]=chr(168);
 $conv['u'][]=chr(209).chr(145); // ё
 $conv['w'][]=chr(184);
 $conv['u'][]=chr(208).chr(135); // Ї
 $conv['w'][]=chr(175);
 $conv['u'][]=chr(209).chr(151); // ї
 $conv['w'][]=chr(191);
 $conv['u'][]=chr(208).chr(134); // І
 $conv['w'][]=chr(178);
 $conv['u'][]=chr(209).chr(150); // і
 $conv['w'][]=chr(179);
 $conv['u'][]=chr(210).chr(144); // Ґ
 $conv['w'][]=chr(165);
 $conv['u'][]=chr(210).chr(145); // ґ
 $conv['w'][]=chr(180);
 $conv['u'][]=chr(208).chr(132); // Є
 $conv['w'][]=chr(170);
 $conv['u'][]=chr(209).chr(148); // є
 $conv['w'][]=chr(186);
 $conv['u'][]=chr(226).chr(132).chr(150); // №
 $conv['w'][]=chr(185);
 }
 if ($type == 'w') { return str_replace($conv['u'],$conv['w'],$str); }
 elseif ($type == 'u') { return str_replace($conv['w'], $conv['u'],$str); }
 else { return $str; }
} 
function win2utf($s) {
 for($i=0, $m=strlen($s); $i<$m; $i++) {
 $c=ord($s[$i]);
 if ($c<=127) {$t.=chr($c); continue; }
 if ($c>=192 && $c<=207) {$t.=chr(208).chr($c-48); continue; }
 if ($c>=208 && $c<=239) {$t.=chr(208).chr($c-48); continue; }
 if ($c>=240 && $c<=255) {$t.=chr(209).chr($c-112); continue; }
 if ($c==184) { $t.=chr(209).chr(209); continue; };
 if ($c==168) { $t.=chr(208).chr(129); continue; };
 if ($c==184) { $t.=chr(209).chr(145); continue; }; #ё
 if ($c==168) { $t.=chr(208).chr(129); continue; }; #Ё
 if ($c==179) { $t.=chr(209).chr(150); continue; }; #і
 if ($c==178) { $t.=chr(208).chr(134); continue; }; #І
 if ($c==191) { $t.=chr(209).chr(151); continue; }; #ї
 if ($c==175) { $t.=chr(208).chr(135); continue; }; #ї
 if ($c==186) { $t.=chr(209).chr(148); continue; }; #є
 if ($c==170) { $t.=chr(208).chr(132); continue; }; #Є
 if ($c==180) { $t.=chr(210).chr(145); continue; }; #ґ
 if ($c==165) { $t.=chr(210).chr(144); continue; }; #Ґ
 if ($c==184) { $t.=chr(209).chr(145); continue; }; #Ґ
 }
 return $t;
}
Автор: Кто-то   @   6 марта 2010 Комментариев: 1
Метки : , ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

Комментариев: 1

Комментарии
марта 6, 2010
22:32
#1 putra :

классно

оставить комментарий

Предыдущая запись
«
Следующая запись
»