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获取MSN好友列表类的实现代码
Jun 23 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
Sep 26 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
PHP+FastCGI+Nginx配置PHP运行环境
Aug 07 PHP
PHP调用wsdl文件类型的接口代码分享
Nov 19 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
Apr 04 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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 mysql 判断update之后是否更新了的方法
2012/01/10 PHP
php生成略缩图代码
2012/07/16 PHP
php显示时间常用方法小结
2015/06/05 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
bootstrap布局中input输入框右侧图标点击功能
2016/05/16 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
vue 移动端适配方案详解
2018/11/15 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
交通安全演讲稿
2014/01/07 职场文书
小学优秀教育工作者事迹材料
2014/05/09 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
教师病假条范文
2015/08/17 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL