Discuz教程网

PHP的ASCII码转换类

[复制链接]
authicon dly 发表于 2011-1-7 12:36:43 | 显示全部楼层 |阅读模式
以前花了不少时间,找可以把中文转ascii码的php代码,utf-8也只是ascii的一种。后来中手册上找到了个,把他改为了批量转换,还增加了一个常用的ascii代码还原字符。这个代码写好了有一段时间了,没什么时间把这些贴出来,大家可以看看,这个类不止只是中文的转换哟
  1. < ?php
  2. class ascii
  3. {

  4. function decode($str)
  5. {
  6.     preg_match_all( "/(d{2,5})/", $str,$a);
  7.     $a = $a[0];
  8.     foreach ($a as $dec)
  9.     {
  10.         if ($dec < 128)
  11.         {
  12.             $utf .= chr($dec);
  13.         }
  14.         else if ($dec < 2048)
  15.        {
  16.             $utf .= chr(192 + (($dec - ($dec % 64)) / 64));
  17.             $utf .= chr(128 + ($dec % 64));
  18.         }
  19.         else
  20.         {
  21.             $utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));
  22.             $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
  23.             $utf .= chr(128 + ($dec % 64));
  24.         }
  25.     }
  26.     return $utf;
  27. }

  28. function encode($c)
  29. {
  30.     $len = strlen($c);
  31.     $a = 0;
  32.     while ($a < $len)
  33.     {
  34.         $ud = 0;
  35.         if (ord($c{$a}) >=0 && ord($c{$a})< =127)
  36.         {
  37.             $ud = ord($c{$a});
  38.             $a += 1;
  39.         }
  40.         else if (ord($c{$a}) >=192 && ord($c{$a})< =223)
  41.         {
  42.             $ud = (ord($c{$a})-192)*64 + (ord($c{$a+1})-128);
  43.             $a += 2;
  44.         }
  45.         else if (ord($c{$a}) >=224 && ord($c{$a})< =239)
  46.         {
  47.             $ud = (ord($c{$a})-224)*4096 + (ord($c{$a+1})-128)*64 + (ord($c{$a+2})-128);
  48.             $a += 3;
  49.         }
  50.         else if (ord($c{$a}) >=240 && ord($c{$a})< =247)
  51.         {
  52.             $ud = (ord($c{$a})-240)*262144 + (ord($c{$a+1})-128)*4096 + (ord($c{$a+2})-128)*64 + (ord($c{$a+3})-128);
  53.             $a += 4;
  54.         }
  55.         else if (ord($c{$a}) >=248 && ord($c{$a})< =251)
  56.         {
  57.             $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);
  58.             $a += 5;
  59.         }
  60.         else if (ord($c{$a}) >=252 && ord($c{$a})< =253)
  61.         {
  62.             $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);
  63.             $a += 6;
  64.         }
  65.         else if (ord($c{$a}) >=254 && ord($c{$a})< =255)
  66.         { //error
  67.             $ud = false;
  68.         }
  69.         $scill .= "&#$ud;";
  70.     }
  71.     return $scill;
  72. }

  73. }
  74. ?>
复制代码



上一篇:php 模拟POST提交的2种方法
下一篇:php常用函数类
authicon 风中徜徉 发表于 2011-6-21 03:00:03 | 显示全部楼层
看一下啊,嘻嘻
authicon fantuanzi 发表于 2011-6-25 01:59:37 | 显示全部楼层
喜欢喜欢喜欢
authicon 乐娃娃 发表于 2011-6-27 03:59:56 | 显示全部楼层
这个还是不错的!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 07:48

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表