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 获取全局变量的代码
Apr 21 PHP
url decode problem 解决方法
Dec 26 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
CI框架中site_url()和base_url()的区别
Jan 07 PHP
php实现RSA加密类实例
Mar 26 PHP
PHP使用flock实现文件加锁的方法
Jul 01 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
May 29 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 Socket写的POP3类
2013/10/30 PHP
详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
2015/07/31 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP最常用的正则表达式
2017/02/13 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
JS中获取 DOM 元素的绝对位置实例详解
2018/04/23 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
2020/05/13 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
使用Python的Flask框架构建大型Web应用程序的结构示例
2016/06/04 Python
对python添加模块路径的三种方法总结
2018/10/16 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
兼职学生的自我评价
2013/11/24 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
2014年工程工作总结
2014/11/25 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP