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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
Apr 13 PHP
thinkphp模板的包含与渲染实例分析
Nov 26 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
CI框架文件上传类及图像处理类用法分析
May 18 PHP
深入理解PHP 数组之count 函数
Jun 13 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
May 31 PHP
laravel withCount 统计关联数量的方法
Oct 10 PHP
PHP新手指南
Apr 01 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
python抽象基类用法实例分析
2015/06/04 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
详解python中的装饰器
2018/07/10 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
使用pytorch实现可视化中间层的结果
2019/12/30 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python gevent协程切换实现详解
2020/09/14 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
UNOde50美国官网:西班牙珠宝品牌
2020/08/15 全球购物
新闻记者实习自我鉴定
2013/09/19 职场文书
土木工程应届生求职信
2013/10/31 职场文书
中国文明网签名寄语
2014/01/18 职场文书
公司保密承诺书
2014/03/27 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
安全责任书模板
2014/07/22 职场文书
Python机器学习之基础概述
2021/05/19 Python