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 相关文章推荐
在Zeus Web Server中安装PHP语言支持
Oct 09 PHP
Content-type 的说明
Oct 09 PHP
献给php初学者(入门学习经验谈)
Oct 12 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
一个PHP针对数字的加密解密类
Mar 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
PHP 反射(Reflection)使用实例
May 12 PHP
PHP概率计算函数汇总
Sep 13 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
PHP配置ZendOpcache插件加速
Feb 14 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
利用PHP动态生成VRML网页
2006/10/09 PHP
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
use jscript Create a SQL Server database
2007/06/16 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
JS实现灵巧的下拉导航效果代码
2015/08/25 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
自己封装的一个简单的倒计时功能实例
2016/11/23 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
2018/08/25 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
2018/12/25 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
原生JS实现pc端轮播图效果
2020/12/21 Javascript
Django框架下在视图中使用模版的方法
2015/07/16 Python
Python实现验证码识别
2020/06/15 Python
如何使用Python处理HDF格式数据及可视化问题
2020/06/24 Python
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
初三家长会邀请函
2014/01/18 职场文书
大学生军训自我鉴定
2014/02/12 职场文书
表彰大会主持词
2014/03/26 职场文书
村党支部换届选举方案
2014/05/02 职场文书
关于运动会的口号
2014/06/07 职场文书
关于环保的活动方案
2014/08/25 职场文书
讲座通知范文
2015/04/23 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
基于JavaScript实现年月日三级联动
2021/06/22 Javascript