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 已经成熟
Dec 04 PHP
php 字符转义 注意事项
May 27 PHP
PHP应用JSON技巧讲解
Feb 03 PHP
利用PHP扩展vld查看PHP opcode操作步骤
Mar 04 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
Apr 08 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
php实现事件监听与触发的方法
Nov 21 PHP
thinkphp常见路径用法分析
Dec 02 PHP
PHP代码维护,重构变困难的4种原因分析
Jan 25 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
TP5框架页面跳转样式操作示例
Apr 05 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中文字符截取防乱码
2008/03/28 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
一个javascript参数的小问题
2008/03/02 Javascript
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
javascript转换静态图片,增加粒子动画效果
2015/05/28 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
vue.js学习之递归组件
2016/12/13 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
JS开发常用工具函数(小结)
2019/07/04 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
2019/10/30 Javascript
linux下python抓屏实现方法
2015/05/22 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
2018/07/11 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
Python连接mysql方法及常用参数
2020/09/01 Python
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
STUBHUB日本:购买和出售全球活动门票
2018/07/01 全球购物
党员公开承诺书
2014/03/25 职场文书
资产运营委托书范本
2014/10/16 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技