当前位置:首页 > PHP教程 > php应用 > 列表

可以保证单词完整性的PHP英文字符串截取代码分享

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-20 16:26:10 浏览: 评论:0 

这篇文章主要介绍了可以保证单词完整性的PHP英文字符串截取代码分享,代码中包含详细注释,需要的朋友可以参考下。

直接上代码:

  1. /** 
  2.    * 完整词的截取 
  3.    * 
  4.    * @param $str 
  5.    * @param $start 
  6.    * @param $length 
  7.    * 
  8.    * @return string 
  9.    */ 
  10.   public static function usubstr($str$start$length = null) 
  11.   { 
  12.    
  13.     // 先正常截取一遍. 
  14.     $res = substr($str$start$length); 
  15.     $strlen = strlen($str); 
  16.    
  17.     /* 接着判断头尾各6字节是否完整(不残缺) */ 
  18.     // 如果参数start是正数 
  19.     if ($start >= 0) { 
  20.       // 往前再截取大约6字节 
  21.       $next_start = $start + $length// 初始位置 
  22.       $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start
  23.       $next_segm = substr($str$next_start$next_len); 
  24.       // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节 
  25.       $prev_start = $start - 6 > 0 ? $start - 6 : 0; 
  26.       $prev_segm = substr($str$prev_start$start - $prev_start); 
  27.     } // start是负数 
  28.     else { 
  29.       // 往前再截取大约6字节 
  30.       $next_start = $strlen + $start + $length// 初始位置 
  31.       $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start
  32.       $next_segm = substr($str$next_start$next_len); 
  33.    
  34.       // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节. 
  35.       $start = $strlen + $start
  36.       $prev_start = $start - 6 > 0 ? $start - 6 : 0; 
  37.       $prev_segm = substr($str$prev_start$start - $prev_start); 
  38.     } 
  39.     // 判断前6字节是否符合utf8规则 
  40.     if (preg_match('@^([x80-xBF]{0,5})[xC0-xFD]?@'$next_segm$bytes)) { 
  41.       if (!emptyempty($bytes[1])) { 
  42.         $bytes = $bytes[1]; 
  43.         $res .= $bytes
  44.       } 
  45.     } 
  46.     // 判断后6字节是否符合utf8规则 
  47.     $ord0 = ord($res[0]); 
  48.     if (128 <= $ord0 && 191 >= $ord0) { 
  49.       // 往后截取 , 并加在res的前面. 
  50.       if (preg_match('@[xC0-xFD][x80-xBF]{0,5}$@'$prev_segm$bytes)) { 
  51.         if (!emptyempty($bytes[0])) { 
  52.           $bytes = $bytes[0]; 
  53.           $res = $bytes . $res
  54.         } 
  55.       } 
  56.     } 
  57.     if (strlen($res) < $strlen) { 
  58.       $res = $res . '...'
  59.     } 
  60.     return $res
  61.   } 

Tags: PHP英文字符串

分享到: