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));
};
?>