php中文字符串截取多种方法汇总


Posted in PHP onOctober 06, 2016

1. 截取GB2312中文字符串

<?php
 
< ?php
//截取中文字符串
function mysubstr($str, $start, $len) {
  $tmpstr = "";
  $strlen = $start + $len;
  for($i = 0; $i < $strlen; $i++) {
    if(ord(substr($str, $i, 1)) > 0xa0) {
      $tmpstr .= substr($str, $i, 2);
      $i++;
    } else
      $tmpstr .= substr($str, $i, 1);
  }
  return $tmpstr;
}
?>

2. 截取utf8编码的多字节字符串

<?php
< ?php
//截取utf8字符串
function utf8Substr($str, $from, $len)
{
  return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
            '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
            '$1',$str);
}
?>

3. UTF-8、GB2312都支持的汉字截取函数

<?php
< ?php
/*
Utf-8、gb2312都支持的汉字截取函数
cut_str(字符串, 截取长度, 开始长度, 编码);
编码默认为 utf-8
开始长度默认为 0
*/
 
function cut_str($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][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
    preg_match_all($pa, $string, $t_string);
 
    if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
    return join('', array_slice($t_string[0], $start, $sublen));
  }
  else
  {
    $start = $start*2;
    $sublen = $sublen*2;
    $strlen = strlen($string);
    $tmpstr = '';
 
    for($i=0; $i< $strlen; $i++)
    {
      if($i>=$start && $i< ($start+$sublen))
      {
        if(ord(substr($string, $i, 1))>129)
        {
          $tmpstr.= substr($string, $i, 2);
        }
        else
        {
          $tmpstr.= substr($string, $i, 1);
        }
      }
      if(ord(substr($string, $i, 1))>129) $i++;
    }
    if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
    return $tmpstr;
  }
}
 
$str = "abcd需要截取的字符串";
echo cut_str($str, 8, 0, 'gb2312');
?>

4. BugFree 的字符截取函数

< ?php
/**
 * @package   BugFree
 * @version   $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
 *
 *
 * Return part of a string(Enhance the function substr())
 *
 * @author         Chunsheng Wang <wwccss@263.net>
 * @param string $String the string to cut.
 * @param int   $Length the length of returned string.
 * @param booble $Append whether append "...": false|true
 * @return string      the cutted string.
 */
function sysSubStr($String,$Length,$Append = false)
{
  if (strlen($String) < = $Length )
  {
    return $String;
  }
  else
  {
    $I = 0;
    while ($I < $Length)
    {
      $StringTMP = substr($String,$I,1);
      if ( ord($StringTMP) >=224 )
      {
        $StringTMP = substr($String,$I,3);
        $I = $I + 3;
      }
      elseif( ord($StringTMP) >=192 )
      {
        $StringTMP = substr($String,$I,2);
        $I = $I + 2;
      }
      else
      {
        $I = $I + 1;
      }
      $StringLast[] = $StringTMP;
    }
    $StringLast = implode("",$StringLast);
    if($Append)
    {
      $StringLast .= "...";
    }
    return $StringLast;
  }
}
 
$String = "17test.info 走在中国自动化测试的前沿";
$Length = "18";
$Append = false;
echo sysSubStr($String,$Length,$Append);
?>

以上就是本文的全部内容,希望对大家有所帮助,希望大家继续关注三水点靠木的最新内容。

PHP 相关文章推荐
PHP的面试题集,附我的答案和分析(一)
Nov 19 PHP
php auth_http类库进行身份效验
Mar 19 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
php header示例代码(推荐)
Sep 08 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
详解php的socket通信
Aug 11 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP获取星期几的常用方法小结
Dec 18 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 PHP
用Laravel轻松处理千万级数据的方法实现
Dec 25 PHP
PHP微信红包生成代码分享
Oct 06 #PHP
php下载文件超时时间的设置方法
Oct 06 #PHP
详谈php静态方法及普通方法的区别
Oct 04 #PHP
php操作路径的经典方法(必看篇)
Oct 04 #PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 #PHP
浅谈PHP中静态方法和非静态方法的相互调用
Oct 04 #PHP
PHP图片添加水印功能示例小结
Oct 03 #PHP
You might like
西德产收音机
2021/03/01 无线电
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
2016/06/06 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS设置时间无效问题的解决办法
2017/02/18 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
js中!和!!的区别与用法
2020/05/09 Javascript
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
Django中使用group_by的方法
2015/05/26 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
英国独特家具和家庭用品购物网站:Cuckooland
2020/08/30 全球购物
中班开学寄语
2014/04/04 职场文书
员工教育培训协议书
2014/09/27 职场文书
加强作风建设心得体会
2014/10/22 职场文书
公司停电通知
2015/04/15 职场文书
建筑工程催款函
2015/06/24 职场文书
学生会任命书范本
2015/09/21 职场文书
pytorch中的torch.nn.Conv2d()函数图文详解
2022/02/28 Python
MySQL慢查询优化解决问题
2022/03/17 MySQL