php截取中文的函数utf_substr

发布时间:2020-11-10编辑:脚本学堂
本文介绍下,实现截取中文字符串的php自定义函数,有需要的朋友参考下吧。

类似这样的替换操作,用到了php函数preg_replace:
 

复制代码 代码示例:
$tmp = preg_replace('/[一-龥]/u','<@>','你好我是谁?123abc');
/u是UTF-8

代码1,PHP截取UTF-8字符串,解决半字符问题
 

复制代码 代码示例:

<?php
/***
* PHP截取UTF-8字符串,解决半字符问题。utf_substr
* 英文、数字(半角)为1字节(8位),中文(全角)为3字节
* @return 取出的字符串, 当$len小于等于0时, 会返回整个字符串
* @param $str 源字符串
* $len 左边的子串的长度
* @edit www.jb200.com
function utf_substr($str,$len){
for($i=0;$i<$len;$i++){
   $temp_str=substr($str,0,1);
   if(ord($temp_str) > 127){
    $i++;
    if($i<$len){
     $new_str[]=substr($str,0,3);
     $str=substr($str,3);
    }
   }else{
    $new_str[]=substr($str,0,1);
   $str=substr($str,1);
   }
}
return join($new_str);
}

//调用示例
$str = utf_substr('你好',4);
echo $str;
?>

代码2,截取utf-8字符串函数
 

复制代码 代码示例:

<?php
/**
* 截取utf-8字符串
* edit www.jb200.com
*/
function cut_str($sourcestr,$cutlength){
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);//字符串的字节数
while (($n<$cutlength) and ($i<=$str_length)){
   $temp_str=substr($sourcestr,$i,1);
   $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
   if ($ascnum>=224){ //如果ASCII位高与224,
    $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
    $i=$i+3; //实际Byte计为3
    $n++; //字串长度计1
   }elseif ($ascnum>=192){ //如果ASCII位高与192,
    $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
    $i=$i+2; //实际Byte计为2
    $n++; //字串长度计1
   }elseif ($ascnum>=65 && $ascnum<=90){ //如果是大写字母,
    $returnstr=$returnstr.substr($sourcestr,$i,1);
    $i=$i+1; //实际的Byte数仍计1个
    $n++; //但考虑整体美观,大写字母计成一个高位字符
   }else{ //其他情况下,包括小写字母和半角标点符号,
    $returnstr=$returnstr.substr($sourcestr,$i,1);
    $i=$i+1; //实际的Byte数计1个
    $n=$n+0.5; //小写字母和半角标点等与半个高位字符宽...
   }
}
if ($str_length>$cutlength){
   $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
}
return $returnstr;
}

//调用示例
$str = '你好!我好';
$str = cut_str($str,3);
echo $str;
?>