你可以试着看看汉字的ORD是多少啊

解决方案 »

  1.   

    for ($i=0; $i<$length; $i++)
    {
        if (ord(substr($text, $i))>0xE0) {
            $UGB = "utf-8";
            break;
        } elseif (ord(substr($text, $i,1))>0x81) {
            $UGB = "简体";
            break;
        } elseif (ord(substr($text, $i, 1))>0xA1) {
            $UGB = "HZ";
            break;
        }
    }这样子可以么?我这里没环境,没有测试。
      

  2.   

    是不是你顺序写错了?for ($i=0; $i<$length; $i++)
    {
        if (ord(substr($text, $i))>0xE0) {
            $UGB = "utf-8";
            break;
        } elseif (ord(substr($text, $i))>0x80) {           //a
            $UGB = "HZ";
            break;
        } elseif (ord(substr($text, $i))>0xA1) {           //b
            $UGB = "HZ";
            break;
        }
    }上面这段程序如果substr($text, $i) = 0xA2的话,那么将在a处结束循环,所以这历史一个问题吧,尝试换一下顺序,看看结果如何?for ($i=0; $i<$length; $i++)
    {
        if (ord(substr($text, $i))>0xE0) {
            $UGB = "utf-8";
            break;
        } elseif (ord(substr($text, $i))>0xA1) {           
            $UGB = "HZ";
            break;
        } elseif (ord(substr($text, $i))>0x80) {           
            $UGB = "HZ";
            break;
        }
    }
      

  3.   

    你对编码完全不了解,这是个完全错误的程序$text="柚";
    试试
      

  4.   

    汉字“桀”内码是E8EE
    你用GulimChe字体(韩文字体)是“姚”
    你用MS Gothic字体(日文字体)是“韶”
    你用MingLiu字体(Big5字体)是“鴅”呵呵,怎能从text的内容分出语言呢?
    windows目录下面有个“GBK.txt”,有空自己用不同的字体研究下
    你还会发现泰文、德文、法文的内码都……
      

  5.   

    单纯的用程序来解决问题是很难的,甚至可能做不到的就算是Iconv也要你告诉它是什么字符集,也不能自己判断我这个是笨的方法,不过是可以解决问题的,并且不影响速度function strUGB($strtext, $strurl, $strcome)
    {
        $UGB = "";
        $length = strlen($strtext);
        for ($i=0; $i<$length; $i++)
        {
            if (ord(substr($strtext, $i))>0xE0) //先判断UTF-8,UTF-8的是三个字节,GB2312,BIG5是两个字节,可以分离
            {
                $UGB = "utf-8";
                break;
            }
            elseif (ord(substr($strtext, $i))>0xA1) //汉字
            {
                $UGB = "HZ";
                break;
            }
            elseif (ord(substr($strtext, $i))>0x80) //汉字
            {
                $UGB = "HZ";
                break;
            } //不满足的就不是多字节汉字,一般就是英文数字和符号,或者其他的,我这边就是要汉字,所以其他就无所谓
        }    if ($UGB == "utf-8") //我的网站是UTF-8,所以就不用转码了,直接添加
        {
            keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 1);
        }
        elseif ($UGB == "HZ") //非UTF-8汉字要一般就是GB2312,BIG5,要判断
        {
            require_once("./encoding/chinese.php");
            require_once("./encoding/class.Chinese.php");//这个是一个汉字转码的类,网上很多,可以下载
            $strgb = trim(gb2utf($strtext)); //先假设GB2312转UTF-8
            $strbig = trim(big2utf($strtext)); //先假设BIG5转UTF-8
            $strutf2gb = trim(utf2gb($strgb)); //再将UTF-8转回GB2312
            $strutf2big = trim(utf2big($strbig)); //再将UTF-8转回BIG5
            if (urlencode($strtext) == ereg_replace("%00", "", urlencode($strutf2gb))) //比较GB2312转回的是否一致,一致就是GB2312
            {
                keywords_come_add(htmlspecialchars($strgb), $strurl, $strcome, 1);
            }
            elseif (urlencode($strtext) == ereg_replace("%00", "", urlencode($strutf2big))) //比较BIG5转回的是否一致,一致就是BIG5
            {
                keywords_come_add(htmlspecialchars($strbig), $strurl, $strcome, 1);
            }
            else
            {
                keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 0); //否则就是乱码,因为即使是用Iconv也会有部分字转不了UTF-8,是??,所以就是乱码,定义一个$STR = 0 为乱码,其余都是正常的为1,可以直接调用
            }
        }
        else
        {
            keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 1); //英文数字和符号,或者其他的,就直接添加
        }
    }总结:先不管是GB2312还是BIG5都分别用GB2312和BIG5的转码一下,然后再将其转回比较,比较用urlencode转为URL格式比较好,因为我的这个转码的好象会加空格,并且还不是一般的空格,urlencode后就是%00,所以要过滤掉,然后比较,因为转码类的缺陷,部分字转成了??所以就有乱码,在数据库标识一下,以后可以手工处理,这个用于添加来路搜索引擎的关键字添加是有用的
    在我目前的水平,只能用这个方法来做了如果那个高手有更加好的方法,告诉我,我感激不尽http://www.gooot.com/我的网站,大家互相交流,我也是刚从ASP转过来的。请高手有时间过去看看,指点一二,也可以黑,但是黑完后,要告诉我是什么问题,我好解决问题,不要破坏就可以了
      

  6.   

    1、utf-8是三个字节的,不错吧,那么就是可以和gb2312,big5分离2、一般中文的程序,我们只是要识别gb2312,big5,utf-8,其中utf-8是系统默认的,所以不要可逆,其实逆操作只有两个字符集,并且一般来路的关键字都不是很长的,所以基本也谈不上什么效率问题,如果是很长的话自然就要取部分3、如果有不可识别就在数据库注明即可,以后可以手工识别4、唠叨好像你是这里的老大,你能关注很好,希望大家可以一起解决这个问题