PHP 截取字符串函数整理(支持gb2312和utf-8)


Posted in PHP onFebruary 16, 2010

1、截取GB2312字符用的函数

PHP代码

<?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代码

<?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代码

<?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代码

<?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 <wwccss@263.net> 
* @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 = "book.chinaz.com -- 站长书库、站长教程"; 
$Length = "18"; 
$Append = false; 
echo sysSubStr($String,$Length,$Append); 
?>
PHP 相关文章推荐
PHP下判断网址是否有效的代码
Oct 08 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
Aug 08 PHP
教你识别简单的免查杀PHP后门
Sep 13 PHP
php metaphone()函数的定义和用法
May 15 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
May 18 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 #PHP
一步一步学习PHP(6) 面向对象
Feb 16 #PHP
一步一步学习PHP(5) 类和对象
Feb 16 #PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 #PHP
IP138 IP地址查询小偷实现代码
Feb 15 #PHP
PHP采集相关教程之一 CURL函数库
Feb 15 #PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 #PHP
You might like
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
MVC模式的PHP实现
2006/10/09 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
ThinkPHP之getField详解
2014/06/20 PHP
PHP生成唯一订单号
2015/07/05 PHP
YII框架http缓存操作示例
2019/04/29 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
NodeJS实现阿里大鱼短信通知发送
2016/01/17 NodeJs
原生js实现节日时间倒计时功能
2017/01/18 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
2020/08/19 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
[54:24]Optic vs TNC 2018国际邀请赛小组赛BO2 第二场
2018/08/18 DOTA
python中bisect模块用法实例
2014/09/25 Python
Python实现各种排序算法的代码示例总结
2015/12/11 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python学习入门细节知识点
2018/03/29 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
python 调用钉钉机器人的方法
2019/02/20 Python
pyqt5中动画的使用详解
2020/04/01 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
英国网上花店:Bunches
2016/11/29 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
优秀毕业生求职推荐信范文
2013/11/21 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书