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 相关文章推荐
smarty实例教程
Nov 19 PHP
ezSQL PHP数据库操作类库
May 16 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
PHP sprintf()函数用例解析
May 18 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
PHP程序员学习使用Swoole的理由
Jun 24 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 PHP
PHP7新增函数
Mar 09 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
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
PHP下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript将url中的参数加密解密代码
2014/11/17 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
[01:45:05]VGJ.T vs Newbee Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
如何将python中的List转化成dictionary
2016/08/15 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
pytorch如何冻结某层参数的实现
2020/01/10 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
python实现扫雷游戏的示例
2020/10/20 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
Python页面加载的等待方式总结
2021/02/28 Python
如何整合JQuery和Prototype
2014/01/31 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
劳资专员岗位职责
2013/12/27 职场文书
在职证明范本
2015/06/15 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python