Autarchy of the Private Cave

Tiny bits of bioinformatics, [web-]programming etc

    • Archives

    • Recent comments

    How to convert between utf8 and cp-1251 without iconv or mbstring

    8th July 2007

    This helped me, maybe it will help you: How to convert between utf8 and cp1251 without iconv

    In case the original disappears, here’s a “backup”:

    1. function cp1251_to_utf8($s){
    2.     $c209 = chr(209); $c208 = chr(208); $c129 = chr(129);
    3.     for($i=0; $i<strlen($s); $i++)    {
    4.         $c=ord($s&#91;$i&#93;);
    5.         if ($c>=192 and $c<=239) $t.=$c208.chr($c-48);
    6.         elseif ($c>239) $t.=$c209.chr($c-112);
    7.         elseif ($c==184) $t.=$c209.$c209;
    8.         elseif ($c==168)    $t.=$c208.$c129;
    9.         else $t.=$s[$i];
    10.     }
    11.     return $t;
    12. }
    13.  
    14. function utf8_to_cp1251($s)
    15. {
    16.     for ($c=0;$c<strlen($s);$c++)
    17.     {
    18.        $i=ord($s&#91;$c&#93;);
    19.        if ($i<=127) $out.=$s&#91;$c&#93;;
    20.            if ($byte2){
    21.                $new_c2=($c1&3)*64+($i&63);
    22.                $new_c1=($c1>>2)&5;
    23.                $new_i=$new_c1*256+$new_c2;
    24.            if ($new_i==1025){
    25.                $out_i=168;
    26.            } else {
    27.                if ($new_i==1105){
    28.                    $out_i=184;
    29.                } else {
    30.                    $out_i=$new_i-848;
    31.                }
    32.            }
    33.            $out.=chr($out_i);
    34.            $byte2=false;
    35.            }
    36.        if (($i>>5)==6) {
    37.            $c1=$i;
    38.            $byte2=true;
    39.        }
    40.     }
    41.     return $out;
    42. }
    Share

    Leave a Reply

    XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>