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 09 PHP
php 更新数据库中断的解决方法
Jun 05 PHP
php 静态页面中显示动态内容
Aug 14 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php中获取关键词及所属来源搜索引擎名称的代码
Feb 15 PHP
编写php应用程序实现摘要式身份验证的方法详解
Jun 08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
Zend Framework教程之Zend_Layout布局助手详解
Mar 04 PHP
PHP MSSQL 分页实例
Apr 13 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 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
php&amp;java(三)
2006/10/09 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
2017/07/31 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python中安装Scrapy模块依赖包汇总
2017/07/02 Python
python操作列表的函数使用代码详解
2017/12/28 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
2019/07/16 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
2014年高三毕业生自我评价
2014/01/11 职场文书
大学活动邀请函
2014/01/28 职场文书
员工拓展培训方案
2014/02/15 职场文书
优秀教师个人材料
2014/12/15 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
python函数的两种嵌套方法使用
2022/04/02 Python