以前花了不少时间,找可以把中文转ascii码的php代码,utf-8也只是ascii的一种。后来中手册上找到了个,把他改为了批量转换,还增加了一个常用的ascii代码还原字符。这个代码写好了有一段时间了,没什么时间把这些贴出来,大家可以看看,这个类不止只是中文的转换哟,具体请看附件
[php]
<?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;
        }
}
?>
[/php]

使用任何字符集看,效果都是一样的,效果地址如下:
http://qh8.net/test/class.ascii.php

class.ascii.rar
(2006-12-19 13:46:00, Size: 1.56 kB, Downloads: 99)

剑枫 发表于 2006-12-19 15:41:00
超级强
是不是转换完后就不用设置 编码了,随便用户什么国家都可以访问
fcicq的个人空间
fcicq 发表于 2006-12-19 19:11:37
偶倒...一看网页的代码就晕了.哈哈.
millken的个人空间
millken 发表于 2006-12-19 20:36:54
超强,不过要怎么用呢,搞几个实例。
Macaulay 发表于 2006-12-19 21:40:13
挺强悍的
槛外空间
槛外人 发表于 2006-12-21 09:54:54
强悍哦,
好像原创这个版有点萧条了哇
gubo1474 发表于 2006-12-21 14:36:49
呵呵,用来注入查询的话很方便
qh663的个人空间
qh663 发表于 2006-12-21 23:09:38


QUOTE:
原帖由 gubo1474 于 2006-12-21 14:36 发表
呵呵,用来注入查询的话很方便
给出的例子,你是怎么注入的?虽然我的演示没有过滤,但服务器打开了转义。还有就是任何字符都是经过了acsii字符转换的。真不明白你是怎么可能注入的。
phphp的个人空间
phphp 发表于 2006-12-24 09:28:26
很好, $tmp = ord($c{$a});
这个是只针对utf8的吧.
coolcode有个先转成utf-16的很方便 http://www.coolcode.cn/?p=5
millken的个人空间
millken 发表于 2006-12-24 10:06:01
有一点疑问 :
虽然解决了浏览的问题,不过搜索引擎呢?
当爬虫爬到你的站时,会识别类似[php]西班牙语:&#69;l&#32;festiv&#97;l&#32;&#100[/php]
这样的字符吗?

[ 本帖最后由 millken 于 2006-12-24 10:07 AM 编辑 ]
namelessxp 发表于 2006-12-24 13:40:00
呵呵,实体,除了有点浪费用户带宽,其它都挺好
muyufan的个人空间
muyufan 发表于 2006-12-25 14:22:01
他说用来注入查询的意思是用你这个程序


没说你的网站可以注入
fly512 发表于 2006-12-25 15:33:08
收者  以后用
剑枫 发表于 2006-12-29 10:41:46
防止网站盗版的好好好好办法
Catch 发表于 2006-12-29 11:29:21
哈哈。。。防盗版?

PHP有函数可以生成这样的东西的。

当然,也有函数是解这个的。
qymm2000 发表于 2007-01-27 00:31:49
是不是呀
是不是呀是不是呀,看一看吧
sunceenjoy的个人空间
sunceenjoy 发表于 2007-01-29 14:47:45
楼主是把所有的字符转成unicode码吗?全世界的文字也不会出现相同的unicode.
1981 发表于 2007-02-02 12:46:44
PHP没入门的人,还是强烈支持!
robinhunan 发表于 2007-02-12 18:14:07
你的文件,提交的数据都是utf8的数据,假如说把你的代码的
header("Content-Type: text/html; charset=UTF-8"); 行改成
header("Content-Type: text/html; charset=GBK");
就不能用了。也就是说直接使用<?php echo ascii::encode('中国');?>
如果上面这段代码保存成GBK是得不到正确结果的。必须保存成utf-8

也就是说要想在一个页面里面显示多个国家的语言,还是需要知道原来的代码的,
这个方法,可行行更好。效率也要高一些。 http://www.coolcode.cn/?p=5
function encode2($encode, $str) {
     $str = iconv($encode, "UTF-16", $str);
     for ($i = 0; $i < strlen($str); $i++,$i++) {
         $code = ord($str{$i}) * 256 + ord($str{$i + 1});
         if ($code < 128 ) {
             $output .= chr($code);
         } else if ($code != 65279) {
             $output .= "&#".$code.";";
         }
     }
     return $output;
}
psdshow的个人空间
psdshow 发表于 2008-04-01 09:08:41
强悍
楼主把困扰了我好久的问题给解决了

我来说两句

(可选)

我的日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

栏目分类

统计信息

  • 访问数:1234
  • 日志数:0
  • 图片数:0
  • 文件数:0
  • 商品数:0
  • 书签数:0
  • 建立时间:2006-09-01
  • 更新时间:

最新评论

我的收藏

最新好友

最新留言

OPEN

Powered by X-Space 1.1 © 2001-2006 Comsenz Technology Ltd
冀ICP备06023166号