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

2015-01-24信息快讯网

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

直接上代码:

/**
   * 完整词的截取
   *
   * @param $str
   * @param $start
   * @param $length
   *
   * @return string
   */
  public static function usubstr($str, $start, $length = null)
  {
 
    // 先正常截取一遍.
    $res = substr($str, $start, $length);
    $strlen = strlen($str);
 
    /* 接着判断头尾各6字节是否完整(不残缺) */
    // 如果参数start是正数
    if ($start >= 0) {
      // 往前再截取大约6字节
      $next_start = $start + $length; // 初始位置
      $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
      $next_segm = substr($str, $next_start, $next_len);
      // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节
      $prev_start = $start - 6 > 0 ? $start - 6 : 0;
      $prev_segm = substr($str, $prev_start, $start - $prev_start);
    } // start是负数
    else {
      // 往前再截取大约6字节
      $next_start = $strlen + $start + $length; // 初始位置
      $next_len = $next_start + 6 <= $strlen ? 6 : $strlen - $next_start;
      $next_segm = substr($str, $next_start, $next_len);
 
      // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节.
      $start = $strlen + $start;
      $prev_start = $start - 6 > 0 ? $start - 6 : 0;
      $prev_segm = substr($str, $prev_start, $start - $prev_start);
    }
    // 判断前6字节是否符合utf8规则
    if (preg_match('@^([x80-xBF]{0,5})[xC0-xFD]?@', $next_segm, $bytes)) {
      if (!empty($bytes[1])) {
        $bytes = $bytes[1];
        $res .= $bytes;
      }
    }
    // 判断后6字节是否符合utf8规则
    $ord0 = ord($res[0]);
    if (128 <= $ord0 && 191 >= $ord0) {
      // 往后截取 , 并加在res的前面.
      if (preg_match('@[xC0-xFD][x80-xBF]{0,5}$@', $prev_segm, $bytes)) {
        if (!empty($bytes[0])) {
          $bytes = $bytes[0];
          $res = $bytes . $res;
        }
      }
    }
    if (strlen($res) < $strlen) {
      $res = $res . '...';
    }
    return $res;
  }

php提取字符串中网站url地址的方法
PHP间隔一段时间执行代码的方法
PHP清除字符串中所有无用标签的方法
php查找字符串出现次数的方法
PHP中strtr字符串替换用法详解
php中数字、字符与对象判断函数用法实例
php字符串截取函数用法分析
ThinkPHP控制器里javascript代码不能执行的解决方法
基于递归实现的php树形菜单代码
PHP调用wsdl文件类型的接口代码分享
php一行代码获取文件后缀名实例分析
CI框架入门示例之数据库取数据完整实现方法
smarty中英文多编码字符截取乱码问题解决方法
php中文字符串截取方法实例总结
php分页函数完整实例代码
PHP实现视频文件上传完整实例
php mb_substr()函数截取中文字符串应用示例
一个简洁实用的PHP缓存类完整实例
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Linux下手动编译安装PHP扩展的例子分享
PHP魔术引号所带来的安全问题分析
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
兼容ie6浏览器的php下载文件代码分享
PHP获取客户端真实IP地址的5种情况分析和实现代码
PHP生成短网址的3种方法代码实例
PHP中对各种加密算法、Hash算法的速度测试对比代码
PHP数字和字符串ID互转函数(类似优酷ID)
ThinkPHP的截取字符串函数无法显示省略号的解决方法
PHP判断表单复选框选中状态完整例子
php对包含html标签的字符串进行截取的函数分享
PHP安全的URL字符串base64编码和解码
PHP中的多行字符串传递给JavaScript的两种方法
Thinkphp模板中截取字符串函数简介
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
php 购物车完整实现代码
CI框架开发新浪微博登录接口源码完整版
php轻松实现中英文混排字符串截取
©2014-2024 dbsqp.com