加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_郴州站长网 (http://www.0735zz.com/)- 云通信、区块链、物联设备、云计算、站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php 中英文混合文本截取字符串函数

发布时间:2022-06-18 15:32:38 所属栏目:PHP教程 来源:互联网
导读:下面要提供两款php中英文混合文本截取字符串函数,这两款字符串截取函数都是自于不同的cms一款是dede字符串截取函数,一款是phpcms的,现在拿来给各位使用. PHP代码如下: function str_cut($string, $length, $dot = ...) { $strlen = strlen($string); if($str
  下面要提供两款php中英文混合文本截取字符串函数,这两款字符串截取函数都是自于不同的cms一款是dede字符串截取函数,一款是phpcms的,现在拿来给各位使用.
 
  PHP代码如下:
 
  function str_cut($string, $length, $dot = '...')  
  {  
  $strlen = strlen($string);  
  if($strlen <= $length) return $string;  
  $string = str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);  
  $strcut = '';  
  if(strtolower(charset) == 'utf-8')  
  {  
  $n = $tn = $noc = 0;  
  while($n < $strlen)  
  {  
  $t = ord($string[$n]);  
  if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {  
  $tn = 1; $n++; $noc++;  
  } elseif(194 <= $t && $t <= 223) {  
  $tn = 2; $n += 2; $noc += 2;  
  } elseif(224 <= $t && $t < 239) {  
  $tn = 3; $n += 3; $noc += 2;  
  } elseif(240 <= $t && $t <= 247) {  
  $tn = 4; $n += 4; $noc += 2;  
  } elseif(248 <= $t && $t <= 251) {  
  $tn = 5; $n += 5; $noc += 2;  
  } elseif($t == 252 || $t == 253) {  
  $tn = 6; $n += 6; $noc += 2;  
  } else {  
  $n++;  
  }  
  if($noc >= $length) break;  
  }  
  if($noc > $length) $n -= $tn;  
  $strcut = substr($string, 0, $n);  
  }  
  else  
  {  
  $dotlen = strlen($dot);  
  $maxi = $length - $dotlen - 1;  
  for($i = 0; $i < $maxi; $i++)  
  {  
  $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];  
  }  
  } //开源代码phpfensi.com
  $strcut = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $strcut);  
  return $strcut.$dot;  
  }
  方法二:
 
  中文截取2,单字节截取模式,如果是request的内容,必须使用这个函数,代码如下:
 
  function cn_substrr($str,$slen,$startdd=0)  
  {  
  $str = cn_substr(strips教程lashes($str),$slen,$startdd);  
  return addslashes($str);  
  }  
  //中文截取2,单字节截取模式  
  function cn_substr($str,$slen,$startdd=0)  
  {  
  global $cfg_soft_lang;  
  if($cfg_soft_lang=='utf-8')  
  {  
  return cn_substr_utf8($str,$slen,$startdd);  
  }  
  $restr = '';  
  $c = '';  
  $str_len = strlen($str);  
  if($str_len < $startdd+1)  
  {  
  return '';  
  }  
  if($str_len < $startdd + $slen || $slen==0)  
  {  
  $slen = $str_len - $startdd;  
  }  
  $enddd = $startdd + $slen - 1;  
  for($i=0;$i<$str_len;$i++)  
  {  
  if($startdd==0)  
  {  
  $restr .= $c;  
  }  
  else if($i > $startdd)  
  {  
  $restr .= $c;  
  }  
  if(ord($str[$i])>0x80)  
  {  
  if($str_len>$i+1)  
  {  
  $c = $str[$i].$str[$i+1];  
  }  
  $i++;  
  }  
  else  
  {  
  $c = $str[$i];  
  }  
  if($i >= $enddd)  
  {  
  if(strlen($restr)+strlen($c)>$slen)  
  {  
  break;  
  }  
  else  
  {  
  $restr .= $c;  
  break;  
  }  
  }  
  }  
  return $restr;  
  }  
  //utf-8中文截取,单字节截取模式  
  function cn_substr_utf8($str, $length, $start=0)  
  {  
  if(strlen($str) < $start+1)  
  {  
  return '';  
  }  
  preg_match_all("/./su", $str, $ar);  
  $str = '';  
  $tstr = '';  
  //为了兼容mysql教程4.1以下版本,与数据库教程varchar一致,这里使用按字节截取  
  for($i=0; isset($ar[0][$i]); $i++)  
  {  
  if(strlen($tstr) < $start)  
  {  
  $tstr .= $ar[0][$i];  
  }  
  else  
  {  
  if(strlen($str) < $length + strlen($ar[0][$i]) )  
  {  
  $str .= $ar[0][$i];  
  }  
  else  
  {  
  break;  
  }  
  }  
  }  
  return $str;  
  }//开源代码phpfensi.com
  上面二款字符串截取函数有一个相同点,他就是全部支持中英文混体文本,也都是判断asc码值进行区别那个是汉字,那个是中文,以及是utf8还是gbk等.

(编辑:开发网_郴州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读