关于奇矩互动奇矩互动招贤纳士奇矩互动优质虚拟主机Discuz!商业用户享有本站VIP服务LAMP环境配置手册(CentOS5.1)
发新话题
打印

把万国语言转ascii码的php代码

本主题由 lulu 于 2008-4-7 00:09 加入精华

把万国语言转ascii码的php代码

复制内容到剪贴板
代码:
<?php
class ascii
{
    function decode($str) {
        preg_match_all("/(d{2,5})/", $str,$a);
        $a = $a[0];
        foreach ($a as $dec){
            if ($dec < 128) {
                $utf .= chr($dec);
            } else if ($dec < 2048) {
                $utf .= chr(192 + (($dec - ($dec % 64)) / 64));
                $utf .= chr(128 + ($dec % 64));
            } else {
                $utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));
                $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
                $utf .= chr(128 + ($dec % 64));
            }
        }
        return $utf;
    }
   
    function encode($c){
        $len = strlen($c);
        $a = 0;
        while ($a < $len){
            $ud = 0;
            if (ord($c{$a})>=0 && ord($c{$a})<=127){
                $ud = ord($c{$a});
                $a += 1;
            }else if (ord($c{$a})>=192 && ord($c{$a})<=223){
                $ud = (ord($c{$a})-192)*64 + (ord($c{$a+1})-128);
                $a += 2;
            }else if (ord($c{$a})>=224 && ord($c{$a})<=239){
                $ud = (ord($c{$a})-224)*4096 + (ord($c{$a+1})-128)*64 + (ord($c{$a+2})-128);
                $a += 3;
            }else if (ord($c{$a})>=240 && ord($c{$a})<=247){
                $ud = (ord($c{$a})-240)*262144 + (ord($c{$a+1})-128)*4096 + (ord($c{$a+2})-128)*64 + (ord($c{$a+3})-128);
                $a += 4;
            }else if (ord($c{$a})>=248 && ord($c{$a})<=251){
                $ud = (ord($c{$a})-248)*16777216 + (ord($c{$a+1})-128)*262144 + (ord($c{$a+2})-128)*4096 + (ord($c{$a+3})-128)*64 + (ord($c{$a+4})-128);
                $a += 5;
            }else if (ord($c{$a})>=252 && ord($c{$a})<=253){
                $ud = (ord($c{$a})-252)*1073741824 + (ord($c{$a+1})-128)*16777216 + (ord($c{$a+2})-128)*262144 + (ord($c{$a+3})-128)*4096 + (ord($c{$a+4})-128)*64 + (ord($c{$a+5})-128);
                $a += 6;
            }else if (ord($c{$a})>=254 && ord($c{$a})<=255){ //error
                $ud = false;
            }
            $scill .= "&#$ud;";
        }
        return $scill;
    }
}
?>

TOP

发新话题