浅析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;

  }