qh663
版主
  
中级会员
UID 30020
精华
0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13 来自 河源
状态 离线
|
把万国语言转ascii码的php代码
以前花了不少时间,找可以把中文转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; } } ?> 使用任何字符集看,效果都是一样的,效果地址如下:
http://qh8.net/test/class.ascii.php
附件: 您所在的用户组无法下载或查看附件
|  五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844 |
|