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 获取远程网页内容的函数
Sep 08 PHP
百度地图API应用之获取用户的具体位置
Jun 10 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
Dec 17 PHP
php实现上传图片文件代码
Jul 19 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
joomla数据库操作示例代码
Jan 06 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP微信支付开发实例
Jun 22 PHP
laravel中的一些简单实用功能
Nov 03 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
解决laravel5.4下的group by报错的问题
Oct 16 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
透析PHP的配置文件php.ini
2006/10/09 PHP
PHP 和 XML: 使用expat函数(二)
2006/10/09 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
Prototype 学习 Prototype对象
2009/07/12 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
2017/01/04 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
[01:23:35]Ti4主赛事胜者组 DK vs EG 1
2014/07/19 DOTA
Python实现在线音乐播放器
2017/03/03 Python
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
致裁判员加油稿
2014/02/08 职场文书
财务内勤岗位职责
2014/04/17 职场文书
教师拔河比赛广播稿
2014/10/14 职场文书
大学生村官个人总结
2015/02/15 职场文书
推荐信范文大全
2015/03/27 职场文书
旷工辞退通知书
2015/04/17 职场文书
2017寒假社会实践心得体会范文
2016/01/14 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js