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入门源程序
Oct 09 PHP
杏林同学录(五)
Oct 09 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
Mar 05 PHP
基于initPHP的框架介绍
Apr 18 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 PHP
php5与php7的区别点总结
Oct 11 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php去掉文件前几行的方法
2015/07/29 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jQuery+ajax实现无刷新级联菜单示例
2015/05/21 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
基于jQuery实现顶部导航栏功能
2016/12/27 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
关于反爬虫的一些简单总结
2017/12/13 Python
Python绘图实现显示中文
2019/12/04 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
详解Python利用configparser对配置文件进行读写操作
2020/11/03 Python
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
.net工程师笔试题
2012/06/09 面试题
美术教师自我鉴定
2014/02/12 职场文书
节约用水倡议书
2014/04/16 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
拾金不昧感谢信
2015/01/21 职场文书
捐助感谢信
2015/01/22 职场文书
新学期开学标语2015
2015/07/16 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
Python可视化学习之matplotlib内置单颜色
2022/02/24 Python
css3 选择器
2022/05/11 HTML / CSS
Python PIL按比例裁剪图片
2022/05/11 Python