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中的内存管理问题
Aug 31 PHP
php 错误处理经验分享
Oct 11 PHP
php截取后台登陆密码的代码
May 05 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
php使用fopen创建utf8编码文件的方法
Oct 31 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
php array_udiff_assoc 计算两个数组的差集实例
Nov 12 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
用php定义一个数组最简单的方法
Oct 04 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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 curl 并发最佳实践代码分享
2012/09/05 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
js实现点击切换TAB标签实例
2015/08/21 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
详解Vue SPA项目优化小记
2018/07/03 Javascript
JavaScript日期工具类DateUtils定义与用法示例
2018/09/03 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python使用代理ip访问网站的实例
2018/05/07 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
如何利用cmp命令比较文件
2013/09/23 面试题
小区门卫工作职责
2013/12/14 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
青年教师听课心得体会
2016/01/15 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
HAM-2000摩机图
2021/04/22 无线电
Nginx跨域问题解析与解决
2022/08/05 Servers