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 相关文章推荐
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
完美解决PHP中文乱码
Nov 26 PHP
有关php运算符的知识大全
Nov 03 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
PHP中localeconv()函数的用法
Mar 26 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 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+XML 制作简单的留言本 图文教程
2009/11/02 PHP
PHP实现多条件查询实例代码
2010/07/17 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
通过点击jqgrid表格弹出需要的表格数据
2015/12/02 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
详解angular2 控制视图的封装模式
2018/12/27 Javascript
[02:20]2014DOTA2西雅图邀请赛 MVP外卡赛首胜采访
2014/07/09 DOTA
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
python分割文件的常用方法
2014/11/01 Python
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
python制作简单五子棋游戏
2019/06/18 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
大学生自我评价怎样写好
2013/10/23 职场文书
学习十八大报告感言
2014/02/28 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
个人党性锻炼总结
2015/03/05 职场文书
2015年部门工作总结范文
2015/03/31 职场文书