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 相关文章推荐
PHP伪静态页面函数附使用方法
Jun 20 PHP
使用JSON实现数据的跨域传输的php代码
Dec 20 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
php判断手机访问还是电脑访问示例分享
Jan 20 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
PHP通过API获取手机号码归属地
May 28 PHP
php实现html标签闭合检测与修复方法
Jul 09 PHP
PHP中的session安全吗?
Jan 22 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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
PHP 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
php curl_init函数用法
2014/01/31 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
关于两个jQuery(js)特效冲突的bug的解决办法
2016/09/04 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
python服务器与android客户端socket通信实例
2014/11/12 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python操作yaml说明
2020/04/08 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
python中列表的含义及用法
2020/05/26 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
ETO男装官方网店:ETO Jeans
2019/02/28 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
出纳岗位职责模板
2013/11/27 职场文书
人事助理自荐信
2014/02/02 职场文书
商超业务员岗位职责
2015/02/13 职场文书
大客户经理岗位职责
2015/04/09 职场文书
立项申请报告范本
2015/05/15 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle