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 相关文章推荐
3.从实例开始
Oct 09 PHP
PHP生成UTF8文件的方法
May 15 PHP
PHP日期处理函数 整型日期格式
Jan 12 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
PHP延迟静态绑定示例分享
Jun 22 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
php session_decode函数用法讲解
May 26 PHP
PHP变量的作用范围实例讲解
Dec 22 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 中的一些经验积累
2006/10/09 PHP
php下intval()和(int)转换使用与区别
2008/07/18 PHP
php学习之 数组声明
2011/06/09 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
php中url函数介绍及使用示例
2014/02/13 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
safari下载文件自动加了html后缀问题
2018/11/09 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
JS 实现双色表格实现代码
2009/11/24 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
Node.js实现数据推送
2016/04/14 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
layer.confirm取消按钮绑定事件的方法
2018/08/17 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
python编程使用协程并发的优缺点
2018/09/20 Python
pandas重新生成索引的方法
2018/11/06 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
Python中关于浮点数的冷知识
2019/09/22 Python
Python递归实现打印多重列表代码
2020/02/27 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
Jdbc数据访问技术面试题
2012/03/30 面试题
理工大学毕业生自荐信范文
2014/02/22 职场文书
班主任高考寄语
2015/02/26 职场文书
学历证明样本
2015/06/16 职场文书
高中政治教师教学反思
2016/02/23 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书