PHP不区分中英文截取UTF-8编码的中文字符串

软件 › 编程语言 › PHP 售价:0鸟蛋 浏览:106 时间:星期前
PHP字符串截取UTF-8

        由于UTF-8是一种多字节的字符编码,中文和英文字符的长度是不一致的。在进行字符串截取时,PHP默认的字符串截取函数,可能会导致截取结果错误。

        先给定基本常识:

        ASCII码: 一个中文汉字占两个字节的空间。
        UTF-8编码: 一个中文(含繁体)等于三个字节。
        Unicode编码:一个中文(含繁体)等于两个字节。

        提供以下函数,使得在UTF-8环境下可以正确地截取包含中文和英文的字符串:

/**
 * PHP截取utf-8中文字符串
 * @param $str 被截取的字符串
 * @param $start 起始长度
 * @param $len 截取长度
 * @param $suffix 后缀字符串
 */
function utf8_str_cut($str,$start,$len,$suffix=""){
    $tmpstr = "";
    $n = 0;
    $i = 0;
    $length = $start+$len;
    
    while($i<strlen($str)){
        $value = ord($str[$i]);
        
        if($value >= 65 && $value <= 90){//大写字母
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,1);
            }
            
            $n++;
            $i++;
        }else if($value >= 192 && $value <= 223){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,2);
            }
            
            $n++;
            $i+=2;
        }else if($value >= 224 && $value <= 239){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,3);
            }
            
            $n++;
            $i+=3;
        }else if($value >= 240 && $value <= 247){
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,4);
            }
            
            $n++;
            $i+=4;
        }else{//其他情况下,包括小写字母和半角标点符号
            if($n>=$start && $n<$length){
                $tmpstr .= substr($str,$i,1);
            }
            
            $n += 0.5;
            $i++;
        }
    }
    
    if($n<$len){
        return $tmpstr;
    }else{
        return $tmpstr.$suffix;
    }
}


提问 收藏 举报 1 0
评论(0)
评论
  • 还没有评论,发表第一个评论吧

0 0 1 9 2
提问 回答 资料 博客 粉丝
近期阅读