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 一个比较完善的简单文件上传
Mar 25 PHP
php5.3 废弃函数小结
May 16 PHP
php检测useragent版本示例
Mar 24 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
Smarty中调用FCKeditor的方法
Oct 27 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
详解PHP+AJAX无刷新分页实现方法
Nov 03 PHP
Smarty环境配置与使用入门教程
May 11 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
在laravel中实现ORM模型使用第二个数据库设置
Oct 24 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会话(session)说明介绍
2016/08/21 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js函数返回多个返回值的示例代码
2013/11/05 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
JavaScript仿商城实现图片广告轮播实例代码
2016/02/06 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
vue兄弟组件传递数据的实例
2018/09/06 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
JS原型与继承操作示例
2019/05/09 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python连接DB2数据库
2016/08/27 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
python中yield的用法详解
2021/01/13 Python
Debenhams爱尔兰:英国知名的百货公司
2017/01/02 全球购物
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
整改落实情况汇报材料
2014/10/29 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
股东大会通知
2015/04/24 职场文书
Python中Permission denied的解决方案
2021/04/02 Python
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL