php中编码转换(ASCⅡ码)

分类:PHP | 作者:凹凸曼 | 发表于2011/04/06
以前花了不少时间,找可以把中文转ascii码的php代码,utf-8也只是ascii的一种。后来中手册上找到了个,把他改为了批量转换,还增加了一个常用的ascii代码还原字符。这个代码写好了有一段时间了,没什么时间把这些贴出来,大家可以看看,这个类不止只是中文的转换哟 

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


 

 

最近在技术群中有位兄弟提出了一个问题: 
想让自增的ID格式化为 
A001——A999 
B001——B999 
…… 
Z001——Z999, 

我最初的构思是循环中,分if条件判断出来进行A——Z字母, 
但是这样做有个极大的缺点,代码显得很呆板冗余,26个英文字母等于需要26个判断。 
后来有人支招将字母变成ASCⅡ码,恰好A——Z等于ASCⅡ码的65——91; 
这样就只需要一个函数进行格式化ID就可以了: 

   function format_string($num) {
        
$tag=floor(($num1)/999);
        
//part1计算asc码
        $part1=65+$tag;

        //part2计算数字部分
        $part2=$num999*$tag;

        $a=strlen($part2);

        for($i=0;$i<(3$a);$i++)
         {
         
$b.=0;
         }
        
$str=chr($part1).$b.$part2;
        
return $str;
     }

    for($i=1;$i<5000;$i++)
     {
         
echo   $str=format_string($i).<br />;
     }

 参考文章:http://jar-c.blog.163.com/blog/static/11640125020105744335269/

日志信息 »

该日志于2011-04-06 01:51由 凹凸曼 发表在PHP分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »