php中截取中文字符串的代码小结


Posted in PHP onJuly 17, 2011

字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了。

1. 截取GB2312中文字符串

< ?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 
//截取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 
/* 
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 相关文章推荐
c#中的实现php中的preg_replace
Dec 21 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
收藏的PHP常用函数 推荐收藏保存
Feb 21 PHP
linux下为php添加curl扩展的方法
Jul 29 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
php防止站外远程提交表单的方法
Oct 20 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
php常用的工具开发整理
Sep 26 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 PHP
9个PHP开发常用功能函数小结
Jul 15 #PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 #PHP
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
Jul 14 #PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 #PHP
php入门学习知识点六 PHP文件的读写操作代码
Jul 14 #PHP
php入门学习知识点五 关于php数组的几个基本操作
Jul 14 #PHP
php入门学习知识点四 PHP正则表达式基本应用
Jul 14 #PHP
You might like
PHP4实际应用经验篇(3)
2006/10/09 PHP
PHP伪静态写法附代码
2008/06/20 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
将PHP的session数据存储到数据库中的代码实例
2016/06/24 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
nodejs简单访问及操作mysql数据库的方法示例
2018/03/15 NodeJs
WebPack配置vue多页面的技巧
2018/05/15 Javascript
Angular中sweetalert弹框的基本使用教程
2018/07/22 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
python 回调函数和回调方法的实现分析
2016/03/23 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
高中生期末评语大全
2014/01/28 职场文书
法学专业自我鉴定
2014/02/05 职场文书
养牛场项目建议书
2014/05/13 职场文书
某某同志考察材料
2014/05/28 职场文书
2014年个人委托书范本
2014/10/13 职场文书
学生会个人总结范文
2015/02/15 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
matlab xlabel位置的设置方式
2021/05/21 Python
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python