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 相关文章推荐
Snoopy类使用小例子
Apr 15 PHP
PHP CKEditor 上传图片实现代码
Nov 06 PHP
php利用header函数实现文件下载时直接提示保存
Nov 12 PHP
PHP详解ASCII码对照表与字符转换
Dec 05 PHP
php eval函数用法总结
Oct 31 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php使用wordwrap格式化文本段落的方法
Mar 17 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
php中文字符串截取多种方法汇总
Oct 06 PHP
Django 中 cookie的使用
Aug 17 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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过滤XSS攻击的函数
2013/11/12 PHP
php基于GD库画五星红旗的方法
2015/02/24 PHP
PHP5.5.15+Apache2.4.10+MySQL5.6.20配置方法分享
2016/05/06 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
JavaScript实现添加及删除事件的方法小结
2015/08/04 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
js表单登陆验证示例
2016/10/19 Javascript
详解JavaScript RegExp对象
2017/02/04 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
用vue写一个日历
2020/11/02 Javascript
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
Python3分析处理声音数据的例子
2019/08/27 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
Python实现壁纸下载与轮换
2020/10/19 Python
浅析python连接数据库的重要事项
2021/02/22 Python
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
护士辞职信模板
2014/01/20 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
公司文体活动总结
2015/05/07 职场文书
人与自然的观后感
2015/06/18 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书
企业管理不到位检讨书
2019/06/27 职场文书