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 中include()与require()的对比
Oct 09 PHP
PHP伪造referer实例代码
Sep 20 PHP
PHP中unset,array_splice删除数组中元素的区别
Jul 28 PHP
php生成RSS订阅的方法
Feb 13 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
php实现的任意进制互转类分享
Jul 07 PHP
joomla组件开发入门教程
May 04 PHP
PHP实现小偷程序实例
Oct 31 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
php格式文件打开的四种方法
Feb 24 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 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
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
用js重建星际争霸
2006/12/22 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
在vue中使用setInterval的方法示例
2019/04/16 Javascript
在vscode 中设置 vue模板内容的方法
2020/09/02 Javascript
分享Python字符串关键点
2015/12/13 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
python TCP Socket的粘包和分包的处理详解
2018/02/09 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
Django Rest framework权限的详细用法
2019/07/25 Python
Python 获取项目根路径的代码
2019/09/27 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
python如何修改文件时间属性
2021/02/05 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
大码女装:Ulla Popken
2019/08/06 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
毕业晚会主持词
2014/03/24 职场文书
小学毕业寄语大全
2014/04/03 职场文书
六年级学生评语
2014/04/22 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
2019各种保证书范文
2019/06/24 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js