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 相关文章推荐
优化使用mysql存储session的php代码
Jan 10 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
用PHP编写和读取XML的几种方式
Jan 12 PHP
在smarty中调用php内置函数的方法
Feb 07 PHP
关于PHP堆栈与列队的学习
Jun 21 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
php二维数组排序详解
Nov 06 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
php比较相似字符串的方法
Jun 05 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
PHP实现模拟http请求的方法分析
Dec 20 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
使用Apache的rewrite技术
2006/06/22 PHP
PHP程序级守护进程的实现与优化的使用概述
2013/05/02 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
PHP正则匹配到2个字符串之间的内容方法
2018/12/24 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
本地搭建微信小程序服务器的实现方法
2017/10/27 Javascript
JS中数据结构与算法---排序算法(Sort Algorithm)实例详解
2019/06/17 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
Python socket.error: [Errno 98] Address already in use的原因和解决方法
2014/08/25 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
python获取txt文件词向量过程详解
2019/07/05 Python
Numpy实现卷积神经网络(CNN)的示例
2020/10/09 Python
Python爬取某平台短视频的方法
2021/02/08 Python
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
最便宜促销价格订机票:Airpaz(总部设在印尼,支持中文)
2018/11/13 全球购物
保密工作目标责任书
2014/07/28 职场文书
材料员岗位职责
2015/02/10 职场文书
论文答辩开场白大全
2015/05/27 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
电台广播稿范文
2015/08/19 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书