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中的Class的几点个人看法
Oct 09 PHP
PHP Stream_*系列函数
Aug 01 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
Mar 26 PHP
PHP基础知识回顾
Aug 16 PHP
优化PHP代码技巧的小结
Jun 02 PHP
php遍历解析xml字符串的方法
May 05 PHP
Yii2中Restful API原理实例分析
Jul 25 PHP
php获取excel文件数据
Apr 21 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
laravel5环境隐藏index.php后缀(apache)的方法
Oct 12 PHP
laravel csrf排除路由,禁止,关闭指定路由的例子
Oct 21 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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 时间转换Unix时间戳代码
2010/01/22 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
2011/10/17 PHP
php中拷贝构造函数、赋值运算符重载
2012/07/25 PHP
php类自动加载器实现方法
2015/07/28 PHP
如何在Laravel之外使用illuminate组件详解
2020/09/20 PHP
javascript import css实例代码
2008/07/18 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
easyui window refresh 刷新两次的解决方法(推荐)
2016/05/18 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
详解JavaScript基础知识(JSON、Function对象、原型、引用类型)
2018/01/16 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
2019/01/31 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
浅要分析Python程序与C程序的结合使用
2015/04/07 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
详解Python如何获取列表(List)的中位数
2016/08/12 Python
python多线程http压力测试脚本
2019/06/25 Python
python的json包位置及用法总结
2020/06/21 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
年会活动策划方案
2014/01/23 职场文书
单身联谊活动方案
2014/01/29 职场文书
成立公司计划书
2014/05/07 职场文书
端午节演讲稿
2014/05/23 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书