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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
PHP Array交叉表实现代码
Aug 05 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
May 06 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
php+highchats生成动态统计图
May 21 PHP
php实现按照权重随机排序数据的方法
Jan 09 PHP
使用PHP实现下载CSS文件中的图片
Dec 06 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
AngularJS入门教程(二):AngularJS模板
2014/12/06 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
多个js毫秒倒计时同时进行效果
2016/01/05 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
js实现二级导航功能
2017/03/03 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
nodejs实现日志读取、日志查找及日志刷新的方法分析
2019/05/20 NodeJs
iview的table组件自带的过滤器实现
2019/07/12 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python随机生成彩票号码的方法
2015/03/05 Python
在Django中创建第一个静态视图
2015/07/15 Python
python 文件操作api(文件操作函数)
2016/08/28 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python+树莓派+YOLO打造一款人工智能照相机
2018/01/02 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
在python里面运用多继承方法详解
2019/07/01 Python
Django --Xadmin 判断登录者身份实例
2020/07/03 Python
Python 绘制可视化折线图
2020/07/22 Python
外语系毕业生自荐信范文
2013/12/16 职场文书
优秀志愿者事迹材料
2014/02/03 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android