PHP 截取字符串函数整理(支持gb2312和utf-8)


Posted in PHP onFebruary 16, 2010

1、截取GB2312字符用的函数

PHP代码

<?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代码

<?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代码

<?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代码

<?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 = "book.chinaz.com -- 站长书库、站长教程"; 
$Length = "18"; 
$Append = false; 
echo sysSubStr($String,$Length,$Append); 
?>
PHP 相关文章推荐
2.PHP入门
Oct 09 PHP
十天学会php之第七天
Oct 09 PHP
在 PHP 中使用随机数的三个步骤
Oct 09 PHP
超级简单的发送邮件程序
Oct 09 PHP
PHP基础学习小结
Apr 17 PHP
php阻止页面后退的方法分享
Feb 17 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
php二维码生成以及下载实现
Sep 28 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
Oct 12 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 #PHP
一步一步学习PHP(6) 面向对象
Feb 16 #PHP
一步一步学习PHP(5) 类和对象
Feb 16 #PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 #PHP
IP138 IP地址查询小偷实现代码
Feb 15 #PHP
PHP采集相关教程之一 CURL函数库
Feb 15 #PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 #PHP
You might like
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
canvas绘制一个常用的emoji表情
2017/03/30 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
深入讲解Python函数中参数的使用及默认参数的陷阱
2016/03/13 Python
python中map的基本用法示例
2018/09/10 Python
Python变量类型知识点总结
2019/02/18 Python
python日期相关操作实例小结
2019/06/24 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
python开发入门——set的使用
2020/09/03 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
几道Java和数据库的面试题
2013/05/30 面试题
中专自我鉴定范文
2013/10/16 职场文书
5.1手机促销活动
2014/01/17 职场文书
大学生旷课检讨书
2014/01/22 职场文书
优秀安全员事迹材料
2014/05/11 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
教师党员个人自我评价
2015/03/04 职场文书
2015年工程部工作总结
2015/04/30 职场文书
Android使用EventBus发送消息,Fragment中接收消息的方法会执行多次
2022/04/24 Java/Android
mysql序号rownum行号实现方式
2022/12/24 MySQL