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 MYSQL乱码问题,使用SET NAMES utf8校正
Nov 30 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
php中的strpos使用示例
Feb 27 PHP
php上传图片之时间戳命名(保存路径)
Aug 15 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
May 16 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 PHP
使用php实现网站验证码功能【推荐】
Feb 09 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
DHTML Slide Show script图片轮换
2008/03/03 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jquery mobile实现拨打电话功能的几种方法
2013/08/05 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
DOM基础教程之使用DOM控制表单
2015/01/20 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
基于jquery实现ajax无刷新评论
2020/08/19 Javascript
常用的javascript设计模式
2017/01/11 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
JS实现手写parseInt的方法示例
2017/09/24 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Django异步任务线程池实现原理
2019/12/17 Python
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
软件设计的目标是什么
2016/12/04 面试题
社会实践心得体会
2014/01/03 职场文书
销售辞职报告范文
2014/01/12 职场文书
房屋租赁协议书范本
2014/04/10 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
2015年社区卫生工作总结
2015/04/21 职场文书
《包身工》教学反思
2016/02/23 职场文书
PL350与SW11的比较
2021/04/22 无线电