phpday 2025 - Call For Papers

convert_cyr_string

(PHP 4, PHP 5, PHP 7)

convert_cyr_stringBir Kril karakter kümesini bir diğerine çevirir

Uyarı

Bu işlevin kullanımı PHP 7.4.0 itibariyle ÖNERİLMEMEKTE olup PHP 8.0.0'da tamamen KALDIRILMIŞTIR. Bu işleve kesinlikle güvenilmemelidir.

Açıklama

convert_cyr_string(string $dizge, string $kaynak, string $hedef): string

Bir Kril karakter kümesini bir diğerine çevirir.

Bağımsız Değişkenler

dizge

Dönüştürülecek dizge.

kaynak

Tek bir karakter olarak kaynak dizgenin Kril karakter kümesi.

hedef

Tek bir karakter olarak hedef dizgenin Kril karakter kümesi.

Karakter kümesi adı olarak desteklenen karakterler:

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

Dönen Değerler

Dönüştürülen dizge.

Notlar

Bilginize: Bu işlev ikil dosyalarla çalışırken dosya içeriğini değiştirmez.

Ayrıca Bakınız

add a note

User Contributed Notes 11 notes

up
-1
pavel_bashkatov at elkogroup dot com
21 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
-2
standov at cgu dot kiev dot ua
20 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
-2
Vasyl Skotona
17 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
-4
zehya [at] yandex dotru
18 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
aeon
20 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
-4
zehyaat] yandex dotru
18 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
-4
felix[at]tvpro.net.ru
19 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
-5
strrev(&#34;moc dot liamg at voglod dot yilisav&#34;);
15 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
-5
webmaster at chassidus dot ru
19 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
-5
apoc at ukr dot net
17 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); // №
$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
threed [at] koralsoft.com
21 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;
}
?>
To Top