zl程序教程

您现在的位置是:首页 >  后端

当前栏目

浅析PHP的ASCII码转换类

PHP转换 浅析 ascii
2023-06-13 09:15:03 时间
复制代码代码如下:

classascii
{
functiondecode($str)
{
   preg_match_all("/(d{2,5})/",$str,$a);
   $a=$a[0];
   foreach($aas$dec)
   {
       if($dec<128)
       {
           $utf.=chr($dec);
       }
       elseif($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;
}
functionencode($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;
       }
       elseif(ord($c{$a})>=192&&ord($c{$a})<=223)
       {
           $ud=(ord($c{$a})-192)*64+(ord($c{$a+1})-128);
           $a+=2;
       }
       elseif(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;
       }
       elseif(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;
       }
       elseif(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;
       }
       elseif(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;
       }
       elseif(ord($c{$a})>=254&&ord($c{$a})<=255)
       {//error
           $ud=false;
       }
       $scill.="$ud;";
   }
   return$scill;
}