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 curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
PHP文件操作实现代码分享
Sep 01 PHP
浅析get与post的一些特殊情况
Jul 28 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
PHP随机生成唯一HASH值自定义函数
Apr 20 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 PHP
PHP控制循环操作的时间
Apr 01 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;mysql(六)
2006/10/09 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
PHP7 list() 函数修改
2021/03/09 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
javascript文本模板用法实例
2015/07/31 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
详解Jquery实现ready和bind事件
2016/04/14 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
详解python分布式进程
2018/10/08 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
一套.net面试题及答案
2016/11/02 面试题
安全检查与奖惩制度
2014/01/23 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
2014年教研员工作总结
2014/12/23 职场文书