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 相关文章推荐
使用adodb lite解决问题
Dec 31 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
用PHP解决的一个栈的面试题
Jul 02 PHP
php安装swoole扩展的方法
Mar 19 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
php创建图像具体步骤
Mar 13 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
php微信公众号开发之二级菜单
Oct 20 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 PHP
laravel 解决crontab不执行的问题
Oct 22 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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
php discuz 主题表和回帖表的设计
2009/03/13 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
终于解决了IE8不支持数组的indexOf方法
2013/04/03 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
javascript实现base64 md5 sha1 密码加密
2015/09/09 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
面试题:react和vue的区别分析
2019/04/08 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
python抓取京东商城手机列表url实例代码
2013/12/18 Python
Python函数嵌套实例
2014/09/23 Python
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
python中logging库的使用总结
2017/10/18 Python
python的turtle库使用详解
2019/05/10 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python实现动态循环输出文字功能
2020/05/07 Python
Python识别验证码的实现示例
2020/09/30 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
HSRP的含义以及如何工作
2014/09/10 面试题
学生安全教育材料
2014/02/14 职场文书
干部考核评语
2014/04/29 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
经典禁毒标语
2014/06/16 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
大学生团日活动总结
2015/05/06 职场文书
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB