可以保证单词完整性的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;
  }
(0)

相关推荐

  • php中文字符串截取方法实例总结

    本文实例总结了php中文字符串截取方法,非常实用的技巧.分享给大家供大家参考.具体方法分析如下: 用PHP函数substr截取中文字符可能会出现乱码,主要是substr可能硬生生的将一个中文字符"锯"成两半. 解决办法如下: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数

  • php截取字符串函数分享

    经常看到有新手问PHP有没有类似asp的left函数或right函数,实现截取某字符串左边或右边开始N个字符的函数.答案当然是有的.PHP中的substr函数就可以做的到,只不过PHP把二个函数合二为一了,这里再给大家分享一个更加优秀的截取字符串的函数. 复制代码 代码如下: /**      * 方法库-截取字符串-[该函数作者未知]      * @param string  $string 字符串       * @param int     $length 字符长度      * @pa

  • php mb_substr()函数截取中文字符串应用示例

    substr()函数用来截取字符串,但是对于中文字符会出现问题,而mb_substr()和mb_strcut这两个函数可以,用法与substr()相似,只是在函数最后要加入多一个参数,以设定字符串的编码,使用这两个函数需要在php.ini中把php_mbstring.dll打开. <?php header("content-type:text/html; charset=utf-8"); $string = "你好我好大家好"; echo strlen($st

  • php字符串截取函数用法分析

    本文实例分析了php字符串截取函数用法.分享给大家供大家参考.具体分析如下: php自带的截取字符串的函数只能处理英文,数字的不能截取中文混排的,后面一个示例比较好用,第一个主要是给初学者学学用的,具体代码如下: 复制代码 代码如下: <?php   //构造字符串   $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";   echo "原字符串:<b>".$str."</b><br>&quo

  • php,js,css字符串截取的办法集锦

    可能没什么含量,求少拍砖. 首先是PHP版本的. 复制代码 代码如下: <?php echo mb_strimwidth("这里是内容", 0,3,"...","utf-8"); ?> 其实只用mb_strimwidth一个函数就可以了,该函数的说明如下: mb_strimwidth - 获取按指定宽度截断的字符串 string mb_strimwidth ( string $str , int $start , int $width

  • php截取html字符串及自动补全html标签的方法

    本文实例讲述了php截取html字符串及自动补全html标签的方法.分享给大家供大家参考.具体分析如下: 这里总结一下关于利用php截取html字符串自动补全html标签,实际开发中会经常碰到,很多人直接先strip_tags过滤掉html标签,但是就只剩下纯文本了,可读性非常差,下面是一个函数,代码如下: 复制代码 代码如下: /**  * 截取HTML,并自动补全闭合  * @param $html  * @param $length  * @param $end  */ function

  • php按单词截取字符串的方法

    本文实例讲述了php按单词截取字符串的方法.分享给大家供大家参考.具体分析如下: 这里指定字符串和单词数量进行截取 复制代码 代码如下: <?php function limit_words($string, $word_limit) {     $words = explode(" ",$string);     return implode(" ",array_splice($words,0,$word_limit)); } //Example Usage

  • php截取中文字符串函数实例

    本文实例讲述了php截取中文字符串函数.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php //中文字符串截取 function substr_zh($string,$sublen,$start=0,$code='UTF-8'){  if($code=='UTF-8'){   $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x8

  • 可以保证单词完整性的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字节是否完整(不残缺)

  • php实现的简单压缩英文字符串的代码

    PHP,适应于上帖简单加密后的密文 复制代码 代码如下: <?php  //replacement来自上个版本的加密替换 function compress_func($match) {return strlen($match[0]).$match[0]{0};} function uncompress_func($match) {return str_repeat($match[2], $match[1]);} function compress($str) {          $i = 0

  • php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例

    本文实例讲述了php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8用法.分享给大家供大家参考,具体如下: /* *gb2312中文字符串截取 */ function substr_for_gb2312($str,$start,$len=null) { $totlelength = strlen($str); //特例情况 if ($len == null) $len = $totlelength; if ($len ==0) return ""

  • Joomla框架实现字符串截取的方法示例

    本文实例讲述了Joomla框架实现字符串截取的方法.分享给大家供大家参考,具体如下: 在用joomla进行开发的时候,需要用到国外的资源,一些module,组件,插件之类的,但是我们会发现,在字符串这个方法都需要进行修改.因为PHP的substr方法只是针对于非中文字符串有效,所以要使用另外一种简便容易的方法mb_substr,这样就能轻松解决截取字符的问题. 同时如果需要针对中文,英文,中英文混合排列三种方式(标点符号除外)进行截取字符串,那么正则表达式就派上用场了,附上源码,仅供参考. /*

  • php字符串截取问题

    但是在英文和汉字混合的情况下会出现如下问题: 如果有这样一个字符串 $str="这是一个字符串"; 为了截取该串的前10个字符,使用 if(strlen($str)>10) $str=substr($str,10)."-"; 那么,echo $str的输出应该是"这是一个字-" 假设 $str="这是1个字符串": 这个串中包含了一个半角字符,同样执行: if(strlen($str)>10) $str=subst

  • php字符串截取函数mb_substr用法实例分析

    本文实例讲述了php字符串截取函数mb_substr用法.分享给大家供大家参考,具体如下: string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] )-截取字符串 (PHP 4 >= 4.0.6, PHP 5) $str 要获取字符串的目标字符串(字符串起始位置为0) $start,$str中要使用的第一个字符的位置 $len

  • Mysql字符串截取函数SUBSTRING的用法说明

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my_content_t 2.从右开始截取字符串 right(str, length) 说明:right(被截取字段,截取长度) 例:select right(content,200

  • swift 3.0中实现字符串截取、比较的方法示例

    前言 字符串处理一直都是程序开发中不可避免的,而字符串截取/替换操作更是频繁.swift3.0 中不能直接使用下标数字进行字符串解决,只能使用String.Index来做位置索引,要想实现截取功能首先得获取到String.Index; 下面话不多说了,来一起看看详细的介绍吧. 实例代码 下面两段代码获取开头可结尾,获取中间部分参数用Range<Index>即可: 获取结尾两个字符子串: let sessionId = "this is a test" let index =

  • php中支持多种编码的中文字符串截取函数!

    支持多种编码的中文字符串截取函数!   复制代码 代码如下: /*     * @todo 中文截取,支持gb2312,gbk,utf-8,big5      *     * @param string $str 要截取的字串     * @param int $start 截取起始位置     * @param int $length 截取长度     * @param string $charset utf-8|gb2312|gbk|big5 编码      * @param $suffix

随机推荐