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模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
php mssql扩展SQL查询中文字段名解决方法
Oct 15 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
php中smarty实现多模版网站的方法
Jun 11 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
详解Yii2.0 rules验证规则集合
Mar 21 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 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一些公用函数的集合
2008/03/27 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
window.location.hash 属性使用说明
2010/03/20 Javascript
Pro JavaScript Techniques学习笔记
2010/12/28 Javascript
Jquery之美中不足小结
2011/02/16 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
防止jQuery ajax Load使用缓存的方法小结
2014/02/22 Javascript
详解Javascript 装载和执行
2014/11/17 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
js实现文字截断功能
2016/09/14 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
python3实现单目标粒子群算法
2019/11/14 Python
Python tkinter模版代码实例
2020/02/05 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
基于Python绘制个人足迹地图
2020/06/01 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
寒假思想汇报
2014/01/10 职场文书
安全责任书范本
2014/04/15 职场文书
建筑工地大门标语
2014/06/18 职场文书
安全环保演讲稿
2014/08/28 职场文书
授权收款委托书范本
2014/10/10 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
跑吧孩子观后感
2015/06/10 职场文书