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 相关文章推荐
用libtemplate实现静态网页生成
Oct 09 PHP
php 正则匹配函数体
Aug 25 PHP
查找mysql字段中固定字符串并替换的几个方法
Sep 23 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
PHP include任意文件或URL介绍
Apr 29 PHP
php中字符集转换iconv函数使用总结
Oct 11 PHP
php常用的url处理函数总结
Nov 19 PHP
PHP技术开发微信公众平台
Jul 22 PHP
PHP生成条形码大揭秘
Sep 24 PHP
php 静态属性和静态方法区别详解
Apr 09 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
Jul 03 PHP
基于php解决json_encode中文UNICODE转码问题
Nov 10 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数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
使用Zookeeper分布式部署PHP应用程序
2019/03/15 PHP
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
cookie的secure属性详解
2015/04/08 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
几行js代码实现自适应
2017/02/24 Javascript
js仿淘宝评价评分功能
2017/02/28 Javascript
Vue.js实现模拟微信朋友圈开发demo
2017/04/20 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
jQuery使用正则验证15/18身份证的方法示例
2017/04/27 jQuery
Angular.js中angular-ui-router的简单实践
2017/07/18 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
[13:25]VP vs VICI (BO3)
2018/06/07 DOTA
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
解决seaborn在pycharm中绘图不出图的问题
2018/05/24 Python
Python3使用Selenium获取session和token方法详解
2021/02/16 Python
纯css3制作的火影忍者写轮眼开眼至轮回眼及进化过程实例
2014/11/11 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
青年创业培训欢迎词
2014/01/10 职场文书
大学生评语大全
2014/04/18 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
物理学专业求职信
2014/07/04 职场文书
政府四风问题整改措施
2014/10/04 职场文书
2015大学生实训报告
2014/11/05 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python