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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
强制PHP命令行脚本单进程运行的方法
Apr 15 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
php获取当月最后一天函数分享
Feb 02 PHP
php实现指定字符串中查找子字符串的方法
Mar 17 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
php实现修改新闻时删除图片的方法
May 12 PHP
PHP实现的memcache环形队列类实例
Jul 28 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 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
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
php实现批量下载百度云盘文件例子分享
2014/04/10 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
JavaScript实现左侧菜单效果
2017/12/14 Javascript
Python使用htpasswd实现基本认证授权的例子
2014/06/10 Python
Python中的多重装饰器
2015/04/11 Python
python编程开发之日期操作实例分析
2015/11/13 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
Python如何调用外部系统命令
2019/08/07 Python
Python高级编程之继承问题详解(super与mro)
2019/11/19 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
产品工艺师的岗位职责
2013/11/15 职场文书
八年级物理教学反思
2014/01/19 职场文书
接待员岗位责任制
2014/02/10 职场文书
委托证明模板
2014/09/16 职场文书
事业单位年度考核评语
2014/12/31 职场文书
水电施工员岗位职责
2015/04/11 职场文书
小学教师教育随笔
2015/08/14 职场文书
如何自己动手写SQL执行引擎
2021/06/02 MySQL
Python中time与datetime模块使用方法详解
2022/03/31 Python
我的收音机情缘
2022/04/05 无线电
Java异常体系非正常停止和分类
2022/06/14 Java/Android