PHP 截取字符串 分别适合GB2312和UTF8编码情况


Posted in PHP onFebruary 12, 2009

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 <[email]wwccss@263.net[/email]> 
* @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 = "www.at0915.cn"; 
$Length = "18"; 
$Append = false; 
echo sysSubStr($String,$Length,$Append); 
?>
PHP 相关文章推荐
PHP自动更新新闻DIY
Oct 09 PHP
PHP调用三种数据库的方法(1)
Oct 09 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
Mar 13 PHP
php 变量未定义等错误的解决方法
Jan 12 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
YII2框架中使用yii.js实现的post请求
Apr 09 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
PHP 操作文件的一些FAQ总结
Feb 12 #PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 #PHP
PHP6 mysql连接方式说明
Feb 09 #PHP
PHP 数据库树的遍历方法
Feb 06 #PHP
一周让你学会PHP 不错的学习资料
Feb 06 #PHP
简化php模板页面中分页代码的解析
Feb 06 #PHP
精通php的十大要点(上)
Feb 04 #PHP
You might like
微信自定义菜单的处理开发示例
2015/04/16 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
layer实现登录弹框,登录成功后关闭弹框并调用父窗口的例子
2019/09/11 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
在Mac OS上搭建Python的开发环境
2015/12/24 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
python删除某个目录文件夹的方法
2020/05/26 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
巴西在线鞋店:Shoestock
2017/10/28 全球购物
旅游管理专业生自荐信范文
2014/01/02 职场文书
党员活动日总结
2014/05/05 职场文书
法学专业求职信
2014/07/15 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
教师节领导致辞
2015/07/29 职场文书
KTV员工管理制度
2015/08/06 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
vue中data里面的数据相互使用方式
2022/06/05 Vue.js