Home  >  Article  >  Backend Development  >  Calculate the length of Chinese strings and intercept Chinese strings in PHP

Calculate the length of Chinese strings and intercept Chinese strings in PHP

巴扎黑
巴扎黑Original
2016-11-11 13:39:351137browse

When doing PHP development, due to my country’s language environment problems, we often need to deal with Chinese. In PHP, we all know that there are special mb_substr and mb_strlen functions that can intercept and calculate the length of Chinese. However, since these functions are not core functions of PHP, they may not be turned on. Of course, if you are using your own server, you only need to enable it in php.ini. If a virtual host is used and the server does not enable this function, then we need to write some functions suitable for our national conditions.

The following functions are quite easy to use. But you need to know that it must be used in a utf-8 environment.

Support gb2312, gbk, utf-8, big5 Chinese interception method

/*  
  
* 中文截取,支持gb2312,gbk,utf-8,big5  
  
*  
  
* @param string $str 要截取的字串  
  
* @param int $start 截取起始位置  
  
* @param int $length 截取长度  
  
* @param string $charset utf-8|gb2312|gbk|big5 编码  
  
* @param $suffix 是否加尾缀  
  
*/  
   
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)   
   
{   
   
   if(function_exists("mb_substr"))   
   
   {   
   
       if(mb_strlen($str, $charset) <= $length) return $str;   
   
       $slice = mb_substr($str, $start, $length, $charset);   
   
   }   
   
   else  
   
   {   
   
       $re[&#39;utf-8&#39;]   = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";   
   
       $re[&#39;gb2312&#39;] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";   
   
       $re[&#39;gbk&#39;]          = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";   
   
       $re[&#39;big5&#39;]          = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";   
   
       preg_match_all($re[$charset], $str, $match);   
   
       if(count($match[0]) <= $length) return $str;   
   
       $slice = join("",array_slice($match[0], $start, $length));   
   
   }   
   
   if($suffix) return $slice."…";   
   
   return $slice;   
   
}


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn