PHP中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]的字符


正则例子:
preg_replace( "/([/x80-/xff])/ ", " ",$str);
preg_replace( "/([u4e00-u9fa5])/ ", " ",$str);

 

二、代码例子


//判断内容里有没有中文-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));
}


//字符串长度统计-UTF8   [中文3个字节,俄文、韩文占2个字节,字母占1个字节]   (Ruby)
def   utf8_string_length(str)
        temp   =   CGI::unescape(str)
        i   =   0;
        j   =   0;
        temp.length.times{|t|
                if   temp[t]   <   127
                        i   +=   1
                elseif   temp[t]   > =   127   and   temp[t]   <   224
                        j   +=   1
                        if   0   ==   (j   %   2)
                                i   +=   2
                                j   =   0
                        end
                else
                        j   +=   1
                        if   0   ==   (j   %   3)
                                i   +=2
                                j   =   0
                        end
                end
        }
        return   i
}

//判断是否是有韩文-UTF-8   (javascript)
function   checkKoreaChar(str)   {
        for(i=0;   i <str.length;   i++)   {
                if(((str.charCodeAt(i)   >   0x3130   &&   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);
}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值