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中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
Session保存到数据库的php类分享
Oct 24 PHP
PHP使用SOAP调用.net的WebService数据
Nov 12 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
ThinkPHP独立分组使用的注意事项
Nov 25 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
PHP自动生成表单代码分享
Jun 19 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
PHP实现搜索时记住状态的方法示例
May 11 PHP
Centos7安装swoole扩展操作示例
Mar 26 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
php strcmp使用说明
2010/04/22 PHP
php学习之流程控制实现代码
2011/06/09 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
javascript 函数调用的对象和方法
2010/07/01 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
树结构之JavaScript
2017/01/24 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
2018/08/16 Javascript
vue中实现弹出层动画效果的示例代码
2020/09/25 Javascript
PyQt5每天必学之工具提示功能
2018/04/19 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
python调用java的jar包方法
2018/12/15 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
解决python3.x安装numpy成功但import出错的问题
2020/11/17 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
优良学风班申请材料
2014/02/13 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
酒店总经理岗位职责
2015/04/01 职场文书
宝葫芦的秘密观后感
2015/06/11 职场文书