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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
php采集速度探究总结(原创)
Apr 18 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
php mail to 配置详解
Jan 16 PHP
PHP的error_reporting错误级别变量对照表
Jul 08 PHP
PHP正则替换函数preg_replace和preg_replace_callback使用总结
Sep 22 PHP
PHP中变量引用与变量销毁机制分析
Nov 15 PHP
PHP技术开发微信公众平台
Jul 22 PHP
php 实现301重定向跳转实例代码
Jul 18 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
PHP集成环境XAMPP的安装与配置
Nov 13 PHP
PHP _construct()函数讲解
Feb 03 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
2015/12/11 PHP
Joomla开启SEF的方法
2016/05/04 PHP
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
Vue.js 实现微信公众号菜单编辑器功能(二)
2018/05/08 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python numpy和list查询其中某个数的个数及定位方法
2018/06/27 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python3使用PySynth制作音乐的方法
2019/09/09 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
大三毕业自我鉴定
2014/01/15 职场文书
《听鱼说话》教学反思
2014/02/15 职场文书
电子商务专业求职信
2014/03/08 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
酒店员工培训方案
2014/06/02 职场文书
送达通知书
2015/04/25 职场文书
小学生暑假生活总结
2015/07/13 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL