>  기사  >  백엔드 개발  >  判断内容里有没有汉语言,然后要返回中文字符

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

WBOY
WBOY원래의
2016-06-13 12:56:22938검색

判断内容里有没有中文,然后要返回中文字符
首先,我用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         $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 ------解决方案--------------------
 $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으로 문의하세요.