PHP 截取字符串 分别适合GB2312和UTF8编码情况


Posted in PHP onFebruary 12, 2009

1. 截取GB2312中文字符串 

<?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 
//截取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 
/* 
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 
/** 
* @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 <[email]wwccss@263.net[/email]> 
* @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 = "www.at0915.cn"; 
$Length = "18"; 
$Append = false; 
echo sysSubStr($String,$Length,$Append); 
?>
PHP 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
php 时间计算问题小结
Jan 04 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
PHP中捕获超时事件的方法实例
Feb 12 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
PHP mysqli事务操作常用方法分析
Jul 22 PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 PHP
laravel-admin的多级联动方法
Sep 30 PHP
php服务器的系统详解
Oct 12 PHP
PHP 操作文件的一些FAQ总结
Feb 12 #PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
Feb 10 #PHP
PHP6 mysql连接方式说明
Feb 09 #PHP
PHP 数据库树的遍历方法
Feb 06 #PHP
一周让你学会PHP 不错的学习资料
Feb 06 #PHP
简化php模板页面中分页代码的解析
Feb 06 #PHP
精通php的十大要点(上)
Feb 04 #PHP
You might like
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
实现PHP+Mysql无限分类的方法汇总
2015/03/02 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
php 使用mpdf实现指定字段配置字体样式的方法
2019/07/29 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
js禁止表单重复提交
2017/08/29 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
Angular2实现的秒表及改良版示例
2019/05/10 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
2020/03/04 Javascript
原生js实现购物车
2020/09/23 Javascript
浅谈function(函数)中的动态参数
2017/04/30 Python
Python线性方程组求解运算示例
2018/01/17 Python
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
有关Python的22个编程技巧
2018/08/29 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
2021/01/05 Python
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
Ajax请求总共有多少种Callback
2016/07/17 面试题
新闻系毕业生推荐信
2013/11/16 职场文书
服装厂厂长职责
2013/12/16 职场文书
公司承诺书格式
2014/05/21 职场文书
医院搬迁方案
2014/06/14 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
幼儿园教学反思范文
2016/03/02 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis
搭建Yolov5服务器
2022/04/30 Servers
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang