自动识别汉字的PHP截取字符串函数

自动识别汉字的PHP截取字符串函数

function splitStr($str,$len){
    if($len<=0){
        return false;
    }
    else{
        $sLen=strlen($str);
        if($len>=$sLen)
            return $str;
        else{
            for($i=0;$i<($len-1);$i++){
                if(ord(substr($str,$i,1))>0xa0)
                    $i++;
            }
            if($i>=$len)
                return substr($str,0,$len);
            elseif(ord(substr($str,$i,1))>0xa0)
                return substr($str,0,$len-1);
            else
                return substr($str,0,$len);
        }
    }
}
 

function substr_for_gb2312($str,$start,$len=null)
{
  $totlelength = strlen($str);


  //特例情况
  if ($len == null) $len = $totlelength;
  if ($len ==0) return "";
  if ($len >= $totlelength && $start == 0 ) return $str;
  if ($start > $totlelength) return "";


  //分析$start
  if ($start < 0 )  //$start<0时,转化为$start>0时的定位.
  {
      if ( abs($start) >= $totlelength ) $start = 0;
      else $start = $totlelength - abs($start);
  }
 
  //确定起始位置,当起始位拆分某汉字时,返回值包含此汉字.
  if ($start > 0)
  {
      $i = $start-1;
      $flag = -1;
      while ($i >= 0)
      {
        if ( ord(substr($str,$i,1)) > 160)
        {
            $flag = -1*$flag;
        }
        else break;
        $i--;
      }
      if($flag==1)
      {
        $start = $start - 1;
        $len++;        //保证不位移.
      }
    }
    $str = substr($str,$start);//截除字符串$str的$start位前的字符
    $totlelength = strlen($str);


    //确定结束位置,当结束位拆分某汉字时,返回值不包含此汉字.
    if ($len<0) $len = $totlelength - abs($len);
    if ($len <= 0) return "";
    $i=min($len,$totlelength);
    $i--;
    $flag = -1;
    while ($i >= 0)
    {
      if (ord(substr($str,$i,1))>160)
      {
          $flag=-1*$flag;
      }
      else break;
      $i--;
    }
    if($flag == 1)
      $len=$len-1;
    $subit=substr($str,0,$len);
    return $subit;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值