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 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
php获取url字符串截取路径的文件名和扩展名的函数
Jan 22 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
php中cookie实现二级域名可访问操作的方法
Nov 11 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
PHP按符号截取字符串的指定部分的实现方法
Sep 10 PHP
用php实现分页效果的示例代码
Dec 10 PHP
php+laravel 扫码二维码签到功能
May 15 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配置文件php.ini的路径的方法
2014/08/20 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
PHP ADODB实现分页功能简单示例
2018/05/25 PHP
Yii框架 session 数据库存储操作方法示例
2019/11/18 PHP
Apply an AutoFormat to an Excel Spreadsheet
2007/06/12 Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
2010/05/07 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
基于JS实现限时抢购倒计时间表代码
2017/05/09 Javascript
浅谈node的事件机制
2017/10/09 Javascript
nodejs 日志模块winston的使用方法
2018/05/02 NodeJs
vue.js input框之间赋值方法
2018/08/24 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python判断字符串与大小写转换
2015/06/08 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
VICHY薇姿美国官方网站:欧洲药房第一的抗衰老品牌
2017/11/22 全球购物
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
将一个文本文件的内容按倒序打印出来
2015/01/05 面试题
Android笔试题总结
2014/11/29 面试题
如何填写个人简历自我评价
2013/12/10 职场文书
市场营销策划方案
2014/06/11 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
台式电脑蓝牙适配器怎么安装?台式电脑蓝牙适配器安装教程
2022/04/08 数码科技
Python 视频画质增强
2022/04/28 Python