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 28 PHP
PHPAnalysis中文分词类详解
Jun 13 PHP
PHP和javascript常用正则表达式及用法实例
Jul 01 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
Sep 22 PHP
PHP实现链式操作的原理详解
Sep 16 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
PHP学习记录之数组函数
Jun 01 PHP
PHP实时统计中文字数和区别
Feb 28 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
May 14 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
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
深入讲解Python编程中的字符串
2015/10/14 Python
python将每个单词按空格分开并保存到文件中
2018/03/19 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
kali中python版本的切换方法
2019/07/11 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
python内置模块collections知识点总结
2019/12/19 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
windows、linux下打包Python3程序详细方法
2020/03/17 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
Python常驻任务实现接收外界参数代码解析
2020/07/21 Python
css3 background属性调整增强介绍
2010/12/18 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
岳父生日宴会答谢词
2014/01/13 职场文书
战友聚会邀请函
2014/01/18 职场文书
中青班党性分析材料
2014/02/16 职场文书
项目建议书格式
2014/03/12 职场文书
五一口号
2014/06/19 职场文书
春节超市活动方案
2014/08/14 职场文书
考勤制度通知
2015/04/25 职场文书
企业战略合作意向书
2015/05/08 职场文书