首页 >后端开发 >php教程 >判断内容里有没有汉语言,然后要返回中文字符

判断内容里有没有汉语言,然后要返回中文字符

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB原创
2016-06-13 11:11:17985浏览

判断内容里有没有中文,然后要返回中文字符
首先,我用preg_match_all('/[x80-xff]./', $s,$arr);检测是否有中文字符,然后打印出$arr,查看中文字符有哪些,再对应修改,但是打印$arr都是乱码,用了几种GB2312转UTF-8的方法都不行。
各位帮忙提供一些方法。


------解决方案--------------------
1、utf-8 是这样编码的:
U 007F  0xxxxxxx
U 07FF  110xxxxx 10xxxxxx
U FFFF  1110xxxx 10xxxxxx 10xxxxxx
U 1FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U 3FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

2、由此可知中文的正则表达式规则串为
/^(?:[x00-x7f]
------解决方案--------------------
[xc0-xff][x80-xbf] ) $/

3、手册中附录了这样的函数
function is_utf8($str) {
    $c=0; $b=0;
    $bits=0;
    $len=strlen($str);
    for($i=0; $i<$len; $i ){
        $c=ord($str[$i]);
        if($c > 128){
            if(($c >= 254)) return false;
            elseif($c >= 252) $bits=6;
            elseif($c >= 248) $bits=5;
            elseif($c >= 240) $bits=4;
            elseif($c >= 224) $bits=3;
            elseif($c >= 192) $bits=2;
            else return false;
            if(($i $bits) > $len) return false;
            while($bits > 1){
                $i ;
                $b=ord($str[$i]);
                if($b < 128 
------解决方案--------------------
 $b > 191) return false;
                $bits--;
            }
        }
    }
    return true;
}

4、从 php5.3 起, mb_string 扩展提供了 mb_check_encoding 函数
if(mb_check_encoding($s, 'utf-8')) echo 'yes';
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn