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 相关文章推荐
一些 PHP 管理系统程序中的后门
Aug 05 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
php 代码优化之经典示例
Mar 24 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
Thinkphp无限级分类代码
Nov 11 PHP
CI配置多数据库访问的方法
Mar 28 PHP
smarty的section嵌套循环用法示例
May 28 PHP
php自动载入类用法实例分析
Jun 24 PHP
Django中通过定时任务触发页面静态化的处理方式
Aug 29 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
Laravel5.1 框架响应基本用法实例分析
Jan 04 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入门速成教程
2007/03/19 PHP
PHP代码审核的详细介绍
2013/06/13 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
php自动获取关键字的方法
2015/01/06 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
详解使用php调用微信接口上传永久素材
2017/04/11 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
2021/01/28 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python中的随机函数小结
2018/01/27 Python
Python实现去除列表中重复元素的方法小结【4种方法】
2018/04/27 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
Python在OpenCV里实现极坐标变换功能
2019/09/02 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
女性时尚网购:Chic Me
2019/07/30 全球购物
2014年清明节寄语
2014/04/03 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
销售内勤岗位职责
2015/02/10 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
2016应届大学生自荐信模板
2016/01/28 职场文书