浅析PHP的ASCII码转换类

浅析PHP的ASCII码转换类

本篇文章是对PHP的ASCII码转换类进行了详细的分析介绍,需要的朋友参考下

复制代码 代码如下:

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;

}