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 相关文章推荐
如何分别全角和半角以避免乱码
Oct 09 PHP
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
二招解决php乱码问题
Mar 25 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
Jun 17 PHP
php判断邮箱地址是否存在的方法
Feb 13 PHP
PHP使用token防止表单重复提交的方法
Apr 07 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 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可逆加密/解密函数分享
2012/09/25 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
微信小程序左滑删除实现代码实例
2019/09/16 Javascript
python实现的一个p2p文件传输实例
2014/06/04 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
Pycharm学习教程(5) Python快捷键相关设置
2017/05/03 Python
Python常见数据类型转换操作示例
2019/05/08 Python
在SQLite-Python中实现返回、查询中文字段的方法
2019/07/17 Python
深入了解Django View(视图系统)
2019/07/23 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
Python如何进行时间处理
2020/08/06 Python
基于Python pyecharts实现多种图例代码解析
2020/08/10 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
J2EE面试题集锦(附答案)
2013/08/16 面试题
JavaScript实现页面动态验证码的实现示例
2021/03/23 Javascript
员工评语大全
2014/01/19 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
禁止酒驾标语
2014/06/25 职场文书
爱护公共设施倡议书
2014/08/29 职场文书
如何写辞职信
2015/05/13 职场文书