0

PHP判断中文字符

Posted in PHP at 八月 11th, 2010 / No Comments »

判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据 中文的范围来判断

编码范围1. GBK (GB2312/GB18030)
\x00-\xff GBK双字节编码范围
\x20-\x7f ASCII
\xa1-\xff 中文
\x80-\xff 中文
2. UTF-8 (Unicode)
\u4e00-\u9fa5 (中文)
\x3130-\x318F (韩文
\xAC00-\xD7A3 (韩文)
\u0800-\u4e00 (日文)
ps: 韩文是大于[\u9fa5]的字符
正则例子:
if (preg_match(‘/^[\x{4e00}-\x{9fa5}]+$/u’, ‘奥运’)){
  echo ‘全是汉字’;
}else{
  echo ‘不全是汉字’;
}
// 打印出 “全是汉字”

if (preg_match(‘/^[\x{4e00}-\x{9fa5}]+$/u’, ‘奥运,’)){
  echo ‘全是汉字’;
}else{
  echo ‘不全是汉字’;
}
//打印出”不全是汉字”,

要点:
有/u模式修正符
php中,不能用\uxxxx表示unicode字符,要用\x{xxxx}

二、代码例子
//判断内容里有没有中文-GBK (PHP)
function check_is_chinese($s){
     return preg_match(‘/[\x80-\xff]./’, $s);
}
//获取字符串长度-GBK (PHP)
function gb_strlen($str){
     $count = 0;
     for($i=0; $i<strlen($str); $i++){
         $s = substr($str, $i, 1);
         if (preg_match(“/[\x80-\xff]/”, $s)) ++$i;
           ++$count;
     }
     return $count;
}
//截取字符串字串-GBK (PHP)
function gb_substr($str, $len){
     $count = 0;
     for($i=0; $i<strlen($str); $i++){
         if($count == $len) break;
         if(preg_match(“/[\x80-\xff]/”, substr($str, $i, 1))) ++$i;
           ++$count;        
     }
     return substr($str, 0, $i);
}
//统计字符串长度-UTF8 (PHP)
function utf8_strlen($str) {
     $count = 0;
     for($i = 0; $i < strlen($str); $i++){
         $value = ord($str[$i]);
         if($value > 127) {
             $count++;
             if($value >= 192 && $value <= 223) $i++;
             elseif($value >= 224 && $value <= 239) $i = $i + 2;
             elseif($value >= 240 && $value <= 247) $i = $i + 3;
             else die(‘Not a UTF-8 compatible string’);
         }
         $count++;
     }
     return $count;
}

//截取字符串-UTF8(PHP)
function utf8_substr($str,$position,$length){
     $start_position = strlen($str);
     $start_byte = 0;
     $end_position = strlen($str);
     $count = 0;
     for($i = 0; $i < strlen($str); $i++){
         if($count >= $position && $start_position > $i){
             $start_position = $i;
             $start_byte = $count;
         }
         if(($count-$start_byte)>=$length) {
             $end_position = $i;
             break;
         }    
         $value = ord($str[$i]);
         if($value > 127){
             $count++;
             if($value >= 192 && $value <= 223) $i++;
             elseif($value >= 224 && $value <= 239) $i = $i + 2;
             elseif($value >= 240 && $value <= 247) $i = $i + 3;
             else die(‘Not a UTF-8 compatible string’);
         }
         $count++;
     }
     return(substr($str,$start_position,$end_position-$start_position));
}
//判断是否是有韩文-UTF-8 (JavaScript)
function checkKoreaChar(str) {
     for(i=0; i<str.length; i++) {
         if(((str.charCodeAt(i) > 0×3130 && str.charCodeAt(i) < 0x318F) || (str.charCodeAt(i) >= 0xAC00 && str.charCodeAt(i) <= 0xD7A3))) {
             return true;
         }
     }
     return false;
}
//判断是否有中文字符-GBK (JavaScript)
function check_chinese_char(s){
     return (s.length != s.replace(/[^\x00-\xff]/g,”**”).length);
}

判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据 中文的范围来判断
string iconv ( string in_charset, string out_charset, string str )—转换字符串字符编码
int ord ( string string )——返回字符的ASCII码
string chr ( int ascii )—–根据字符的ASCII码返回相应的字符
string unicode_encode ( unicode input, string encoding )-
string base64_decode ( string encoded_data )—encoded_data 进行解码,返回原始数据,失败则返回 FALSE。返回的数据可能是二进制的。
string base64_encode ( string data )—使用 base64 对 data 进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。

PHP 如何取得汉字字符串的Unicode编码
unicode_decode和unicode_ encode
$utf8 = unicode_encode(unicode_decode($str, “gb2312″), “utf8″);

一个例子
PHP code
function unicode2utf8($c)
{
     $output=”";
  
     if($c < 0×80)
     {
         return chr($c);
     }
     else if($c < 0×800)
     {
         return chr( 0xc0 | ($c >> 6) ).chr( 0×80 | ($c & 0x3f) );
     }
     else if($c < 0×10000)
     {
         return chr( 0xe0 | ($c >> 12) ).chr( 0×80 | (($c >> 6) & 0x3f) ).chr( 0×80 | ($c & 0x3f) );
     }
     else if($c < 0×200000)
     {
         return chr(0xf0 | ($c >> 18)).chr(0×80 | (($c >> 12) & 0x3f)).chr(0×80 | (($c >> 6) & 0x3f)).chr(0×80 | ($c & 0x3f));
     }
     return false;
}

http://hi.baidu.com/coffelw/blog/item/818524ed8bad752f63d09f46.html

http://www.javaeye.com/topic/214525

Published in PHP
Tags: ,

No Responses to “PHP判断中文字符”

Leave a Reply

请输入算式结果(看不清请点击图片)
(必须)