View file utf8.php

File size: 3.37Kb
<?php
/*
Модуль кодирования/декодирования в utf. Версия от 30 января 2006.
Автор: Denvas
*/
include_once("unicode.php");
//==================================================//
/*
Функция выдергивает кусок данных из $bytes и возвращает 1 байт utf данных
*/
function utf_ochar(&$bites,$pref){
    $lenb=strlen($bites);
    $lenp=strlen($pref);
    $lr=8-$lenp;
    if($lenb+$lenp>8){//здесь была ошибка if($lenb>8)
        $sim=substr($bites,$lenb-$lr,$lr);
        $bites=substr($bites,0,$lenb-$lr);
    }
    else{
        $sim=$bites;
        $bites="";
    };
    while(strlen($sim)<$lr)$sim="0".$sim;
    return $pref.$sim;
};

//==================================================//
/*
Генерирует таблицу символов
$way>0 - кодирование, <0 декодирование
*/
function charmapUTF8($way=1){
    global $charmap;
    //генерация таблицы преобразования
    $map=array();
    reset($charmap);
    while(list($key,$value)=each($charmap)){
        $c=$key;
        if(isset($charmap[$c])){
            $bites=decbin($charmap[$c]);
        }
        else{
            $ci=ord($str[$i]);
            $bites=decbin($ci);
        };
        $nb=strlen($bites);
        if($nb<=7){
            $sim=utf_ochar($bites,"0");
            $bytechar=chr(bindec($sim));
        }
        elseif($nb<=11){
            $sim2=utf_ochar($bites,"10");
            $sim1=utf_ochar($bites,"110");
            $bytechar=chr(bindec($sim1)).chr(bindec($sim2));
        }
        elseif($nb<=16){
            $sim3=utf_ochar($bites,"10");
            $sim2=utf_ochar($bites,"10");
            $sim1=utf_ochar($bites,"1110");
            $bytechar=chr(bindec($sim1)).chr(bindec($sim2)).chr(bindec($sim3));
        }
        elseif($nb<=21){
            $sim4=utf_ochar($bites,"10");
            $sim3=utf_ochar($bites,"10");
            $sim2=utf_ochar($bites,"10");
            $sim1=utf_ochar($bites,"11110");
            $bytechar=chr(bindec($sim1)).chr(bindec($sim2)).chr(bindec($sim3)).chr(bindec($sim4));
        };
        if($way>0)
            $map[$c]=$bytechar;
        else
            $map[$bytechar]=$c;
    };//while(list($key,$value)=each($charmap))
    //преобразовать
    return $map;
};
//==================================================//
/*
Функция кодирует в utf формат
*/
function myUTF8_encode($content){
    return strtr($content,charmapUTF8(1));
};
//==================================================//
/*
Фунция декодирует utf формат
*/
function myUTF8_decode($content){
    return strtr($content,charmapUTF8(-1));
};//function myUTF8_decode
//==================================================//
function charmapCODE($way=1){
    global $charmap;    
    reset($charmap);
    while(list($key,$val)=each($charmap)){
        $hex=dechex($val);
        while(strlen($hex)<4)$hex="0".$hex;
        $hex=strtoupper($hex);
        if($way>0)
            $cmap[$key]="&#x".$hex.";";
        else
            $cmap["&#x".$hex.";"]=$key;
    };
    return $cmap;
};
//==================================================//
/*
Кодирование в формат &#xXXXX;
*/
function myCODE_encode($content){
    return strtr($content,charmapCODE(1));
};
//==================================================//
/*
Декодирование формата &#xXXXX;
*/
function myCODE_decode($content){
    global $charmap;    
    return strtr($content,charmapCODE(-1));
};
?>