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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
php使用curl访问https示例分享
Jan 17 PHP
PHP中date与gmdate的区别及默认时区设置
May 12 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
深入eAccelerator与memcached的区别详解
2013/06/06 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
javascript 表单验证常见正则
2009/09/28 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
节点的插入之append()和appendTo()的用法介绍
2014/01/13 Javascript
node.js入门教程
2014/06/01 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
第二章之Bootstrap 页面排版样式
2016/04/25 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
python的pdb调试命令的命令整理及实例
2017/07/12 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python学习入门细节知识点
2018/03/29 Python
Python中利用xpath解析HTML的方法
2018/05/14 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
Python常用类型转换实现代码实例
2020/07/28 Python
用OpenCV进行年龄和性别检测的实现示例
2021/01/29 Python
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
北京振戎融通Java面试题
2015/09/03 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
车辆转让协议书
2014/09/24 职场文书
初中生旷课检讨书范文
2014/10/06 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年质检工作总结
2015/05/04 职场文书