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 相关文章推荐
模板引擎Smarty深入浅出介绍
Dec 06 PHP
珊瑚虫IP库浅析
Feb 15 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
PHP中创建图像并绘制文字的例子
Nov 19 PHP
php中Ctype函数用法详解
Dec 09 PHP
自己写的php中文截取函数mb_strlen和mb_substr
Feb 09 PHP
PHP编程入门的基本语法知识点总结
Jan 26 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 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
smarty实现多级分类的方法
2014/12/05 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
在浏览器窗口上添加遮罩层的方法
2012/11/12 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
javascript实现的弹出层背景置灰-模拟(easyui dialog)
2013/12/27 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
webpack 代码分离优化快速指北
2019/05/18 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python多进程实现文件下载传输功能
2018/07/28 Python
Python Requests库基本用法示例
2018/08/20 Python
详解Python装饰器
2019/03/25 Python
如何通过Python实现标签云算法
2019/07/02 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
意大利和国际最佳时尚品牌:Drestige
2019/12/28 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
2015年工商局个人工作总结
2015/07/23 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
幼儿园语言教学反思
2016/02/23 职场文书