PHP 8.6.0 Beta 1 is available for testing

convert_cyr_string

(PHP 4, PHP 5, PHP 7)

convert_cyr_stringConvierte un string de un juego de caracteres cirílico a otro

Advertencia

Esta función está OBSOLETA a partir de PHP 7.4.0, y ha sido ELIMINADA a partir de PHP 8.0.0. Depender de esta función está altamente desaconsejado.

Descripción

function convert_cyr_string(string $str, string $from, string $to): string

Convierte un string de un juego de caracteres cirílico a otro.

Parámetros

str

El string a convertir.

from

El juego de caracteres cirílico, como un solo carácter.

to

El juego de caracteres cirílico de destino, como un solo carácter.

Los caracteres admitidos son:

  • k : koi8-r
  • w : windows-1251
  • i : iso8859-5
  • a : x-cp866
  • d : x-cp866
  • m : x-mac-cyrillic

Valores devueltos

Devuelve el string convertido.

Historial de cambios

Versión Descripción
8.0.0 Esta función ha sido eliminada.
7.4.0 Esta función está obsoleta.

Notas

Nota: Esta función es segura para sistemas binarios.

Véase también

  • mb_convert_encoding() - Convertir una cadena de un codificación de caracteres a otra
  • iconv() - Convierte una cadena de caracteres de un encodaje a otro

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 11 notes

up
1
standov at cgu dot kiev dot ua
21 years ago
He is improved function to decode win1251->UTF8
<?php
 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;
 }
?>
up
-1
Vasyl Skotona
18 years ago
A better function to convert cp1251 string to utf8.
Works with russian and ukrainian text.
function unicod($str) {
 $conv=array();
 for($x=128;$x<=143;$x++) $conv[$x+112]=chr(209).chr($x);
 for($x=144;$x<=191;$x++) $conv[$x+48]=chr(208).chr($x);
 $conv[184]=chr(209).chr(145); #ё
 $conv[168]=chr(208).chr(129); #Ё
 $conv[179]=chr(209).chr(150); #і
 $conv[178]=chr(208).chr(134); #І
 $conv[191]=chr(209).chr(151); #ї
 $conv[175]=chr(208).chr(135); #ї
 $conv[186]=chr(209).chr(148); #є
 $conv[170]=chr(208).chr(132); #Є
 $conv[180]=chr(210).chr(145); #ґ
 $conv[165]=chr(210).chr(144); #Ґ
 $conv[184]=chr(209).chr(145); #Ґ
 $ar=str_split($str);
 foreach($ar as $b) if(isset($conv[ord($b)])) $nstr.=$conv[ord($b)]; else $nstr.=$b;
 return $nstr;
}
up
-1
pavel_bashkatov at elkogroup dot com
23 years ago
To: mihailsbo at lycos dot ru
Transliteration could be done easier:
<?
function transliterate($cyrstr)
 {
 $ru = array('A', 'a',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?',
 '?', '?');
 $en = array('A', 'a',
 'B', 'b',
 'V', 'v',
 'G', 'g',
 'D', 'd',
 'E', 'e',
 'E', 'e',
 'Zh', 'zh',
 'Z', 'z',
 'I', 'i',
 'J', 'j',
 'K', 'k',
 'L', 'l',
 'M', 'm',
 'N', 'n',
 'O', 'o',
 'P', 'p',
 'R', 'r',
 'S', 's',
 'T', 't',
 'U', 'u',
 'F', 'f',
 'H', 'h',
 'C', 'c',
 'Ch', 'ch',
 'Sh', 'sh',
 'Sch', 'sch',
 '\'', '\'',
 'Y', 'y', 
 '\'', '\'',
 'E', 'e',
 'Ju', 'ju',
 'Ja', 'ja');
 return str_replace($ru, $en, $cyrstr);
 }
?>
up
-3
zehyaat] yandex dotru
20 years ago
Sorry for my previous post. NOT array_reverce, array_flip is actual function. Correct function:
function Encode($str,$type=u)
{
 $conv=array();
 for($x=192;$x<=239;$x++)
 $conv[u][chr($x)]=chr(208).chr($x-48);
 for($x=240;$x<=255;$x++)
 $conv[u][chr($x)]=chr(209).chr($x-112);
 $conv[u][chr(168)]=chr(208).chr(129);
 $conv[u][chr(184)]=chr(209).chr(209);
 $conv[w]=array_flip($conv[u]);
 if($type=='w' || $type=='u')
 return strtr($str,$conv[$type]);
 else
 return $str;
}
Sorry for my English ;)
up
-3
aeon
22 years ago
threed's function works great, but the replacement for the letter small io (&#1105;) needs to be changed from 
<?php
if ($c==184) { $t.=chr(209).chr(209); continue; };
?>

to
<?php
if ($c==184) { $t.=chr(209).chr(145); continue; };
?>

so, the final working result should look like this:
<?php
function win3utf($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; };
 }
 return $t;
}
?>
up
-3
felix[at]tvpro.net.ru
21 years ago
Check this code -- exelent to convert win-1251 to UTF-8 
just one fix!!!
 if ($c==184) { $t.=chr(209).chr(145); continue; }; 
Anything more it is not necessary.
It is grateful to threed [at] koralsoft.com
28-Jul-2003 03:37 
i tried all functions here to convert from cp1251 to unicode, but they don't work. i think that this work : 
<?php 
function win3utf($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; }; 
 } 
 return $t; 
} 
?>
up
-4
strrev(&#34;moc dot liamg at voglod dot yilisav&#34;);
17 years ago
Unfortunately input data must be a string only. But it is may be changed! ;) 
To convert multi-dimensional array I use this recursive function:
<?php
function convert_cyr_array($array,$from,$to){
 foreach($array as $key=>$value){
 if(is_array($value)) {
 $result[$key] = convert_cyr_array($value,$from,$to);
 continue;
 }
 $result[$key] = convert_cyr_string($value,$from,$to);
 }
 return $result;
}
?>

An example:
<?php
$array[0] = "сВМПЛП";
$array[1] = "зТХЫБ";
$array[2] = array("пЗХТЕГ","рПНЙДПТ");
$array[3] = array(
 array("бРЕМШУЙО","нБОДБТЙО"),
 array("бВТЙЛПУ","рЕТУЙЛ")
 );
$result = convert_cyr_array($array,"k","w");
/* Returns:
Array
(
 [0] => Яблоко
 [1] => Груша
 [2] => Array
 (
 [0] => Огурец
 [1] => Помидор
 )
 [3] => Array
 (
 [0] => Array
 (
 [0] => Апельсин
 [1] => Мандарин
 )
 [1] => Array
 (
 [0] => Абрикос
 [1] => Персик
 )
 )
)*/
?>
up
-4
webmaster at chassidus dot ru
20 years ago
//I've also built the same way for hebrew to utf converting
function heb2utf($s) {
 for($i=0, $m=strlen($s); $i<$m; $i++) { 
 $c=ord($s[$i]); 
 if ($c<=127) {$t.=chr($c); continue; } 
 if ($c>=224 ) {$t.=chr(215).chr($c-80); continue; } 
 
 } 
 return $t; 
}
//Simple unicoder and decoder for hebrew and russian:
function unicode_hebrew($str) {
 for ($ii=0;$ii<strlen($str);$ii++) {
 $xchr=substr($str,$ii,1);
 if (ord($xchr)>223) {
 $xchr=ord($xchr)+1264;
 $xchr="&#" . $xchr . ";";
 }
 $encode=$encode . $xchr;
 }
 return $encode;
}
function unicode_russian($str) {
 for ($ii=0;$ii<strlen($str);$ii++) {
 $xchr=substr($str,$ii,1);
 if (ord($xchr)>191) {
 $xchr=ord($xchr)+848;
 $xchr="&#" . $xchr . ";";
 }
 $encode=$encode . $xchr;
 }
 return $encode;
}
function decode_unicoded_hebrew($str) {
 $decode="";
 $ar=split("&#",$str);
 foreach ($ar as $value ) {
 $in1=strpos($value,";"); //end of code
 if ($in1>0) {// unicode
 $code=substr($value,0,$in1);
 
 if ($code>=1456 and $code<=1514) { //hebrew
 $code=$code-1264;
 $xchr=chr($code);
 } else { //other unicode
 $xchr="&#" . $code . ";";
 } 
 $xchr=$xchr . substr($value,$in1+1); 
 } else //not unicode
 $xchr = $value;
 
 $decode=$decode . $xchr;
 }
 return $decode;
}
function decode_unicoded_russian($str) {
 $decode="";
 $ar=split("&#",$str);
 foreach ($ar as $value ) {
 $in1=strpos($value,";"); //end of code
 if ($in1>0) {// unicode
 $code=substr($value,0,$in1);
 
 if ($code>=1040 and $code<=1103) {
 $code=$code-848;
 $xchr=chr($code);
 } else {
 $xchr="&#" . $code . ";";
 } 
 $xchr=$xchr . substr($value,$in1+1); 
 } else
 $xchr = $value;
 
 $decode=$decode . $xchr;
 }
 return $decode;
}
up
-4
apoc at ukr dot net
18 years ago
:) what about NUMBER!!!???
 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); // No
 $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; }
 }
up
-5
zehya [at] yandex dotru
20 years ago
cathody at mail dot ru(27-Jul-2005 06:41)
You function doesn't work on my PC..
It's work:
function Encode2($str,$type)
{
 $conv=array();
 for($x=192;$x<=239;$x++)
 $conv[u][chr($x)]=chr(208).chr($x-48);
 for($x=240;$x<=255;$x++)
 $conv[u][chr($x)]=chr(209).chr($x-112);
 $conv[u][chr(168)]=chr(208).chr(129);
 $conv[u][chr(184)]=chr(209).chr(209);
 $conv[w]=array_reverse($conv[u]);
 if($type=='w' || $type=='u')
 return strtr($str,$conv[$type]);
 else
 return $str;
}
up
-4
threed [at] koralsoft.com
23 years ago
i tried all functions here to convert from cp1251 to unicode, but they don't work. i think that this work :
<?php
function win3utf($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; };
 }
 return $t;
}
?>
+add a note

AltStyle によって変換されたページ (->オリジナル) /