php中计算中文字符串长度、截取中文字符串的函数代码


Posted in PHP onAugust 09, 2011

在PHP中,我们都知道有专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。当然,如果是用的自己的服务器,则只要在php.ini中开启即可。如果是用的虚拟主机,而服务器又没有开启这方面的函数的话,那就需要我们自己写出点适合咱国情的函数来了。
以下几个函数用起来颇为顺手的。不过要知道,得在utf-8环境下使用。

header('Content-type:text/html;charset=utf-8'); 
/** 
* 可以统计中文字符串长度的函数 
* @param $str 要计算长度的字符串 
* @param $type 计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符 
* 
*/ 
function abslength($str) 
{ 
if(empty($str)){ 
return 0; 
} 
if(function_exists('mb_strlen')){ 
return mb_strlen($str,'utf-8'); 
} 
else { 
preg_match_all("/./u", $str, $ar); 
return count($ar[0]); 
} 
} 
$str = '我们都是中国人啊,ye!'; 
$len = abslength($str); 
var_dump($len); //return 12 
$len = abslength($str,'1'); 
echo '<br />'.$len; //return 22 
/* 
utf-8编码下截取中文字符串,参数可以参照substr函数 
@param $str 要进行截取的字符串 
@param $start 要进行截取的开始位置,负数为反向截取 
@param $end 要进行截取的长度 
*/ 
function utf8_substr($str,$start=0) { 
if(empty($str)){ 
return false; 
} 
if (function_exists('mb_substr')){ 
if(func_num_args() >= 3) { 
$end = func_get_arg(2); 
return mb_substr($str,$start,$end,'utf-8'); 
} 
else { 
mb_internal_encoding("UTF-8"); 
return mb_substr($str,$start); 
} 
} 
else { 
$null = ""; 
preg_match_all("/./u", $str, $ar); 
if(func_num_args() >= 3) { 
$end = func_get_arg(2); 
return join($null, array_slice($ar[0],$start,$end)); 
} 
else { 
return join($null, array_slice($ar[0],$start)); 
} 
} 
} 
$str2 = 'wo要截取zhongwen'; 
echo '<br />'; 
echo utf8_substr($str2,0,-4); //return wo要截取zhon

支持gb2312,gbk,utf-8,big5 中文截取方法
/* 
* 中文截取,支持gb2312,gbk,utf-8,big5 
* 
* @param string $str 要截取的字串 
* @param int $start 截取起始位置 
* @param int $length 截取长度 
* @param string $charset utf-8|gb2312|gbk|big5 编码 
* @param $suffix 是否加尾缀 
*/ 
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) 
{ 
if(function_exists("mb_substr")) 
{ 
if(mb_strlen($str, $charset) <= $length) return $str; 
$slice = mb_substr($str, $start, $length, $charset); 
} 
else 
{ 
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; 
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; 
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; 
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; 
preg_match_all($re[$charset], $str, $match); 
if(count($match[0]) <= $length) return $str; 
$slice = join("",array_slice($match[0], $start, $length)); 
} 
if($suffix) return $slice."…"; 
return $slice; 
}
PHP 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
PHP4 与 MySQL 交互使用
Oct 09 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
thinkphp常见路径用法分析
Dec 02 PHP
php遍历目录方法小结
Mar 10 PHP
php准确计算复活节日期的方法
Apr 18 PHP
6个超实用的PHP代码片段
Aug 10 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
Laravel如何使用Redis共享Session
Feb 23 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 #PHP
php的urlencode()URL编码函数浅析
Aug 09 #PHP
php简单的会话类代码
Aug 08 #PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 #PHP
兼容firefox,chrome的网页灰度效果
Aug 08 #PHP
用php解析html的实现代码
Aug 08 #PHP
php中设置多级目录session的问题
Aug 08 #PHP
You might like
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
php面向对象全攻略 (十四) php5接口技术
2009/09/30 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
js随机生成一个验证码
2017/06/01 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
vue元素实现动画过渡效果
2017/07/01 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
2018/10/20 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python读取键盘输入的2种方法
2015/06/16 Python
Centos7 下安装最新的python3.8
2019/10/28 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
python Cartopy的基础使用详解
2020/11/01 Python
详解pandas映射与数据转换
2021/01/22 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
西尔斯百货官网:Sears
2016/09/06 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
资深地理教师自我评价
2013/09/21 职场文书
报名委托书
2015/01/29 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书
python 模块重载的五种方法
2021/04/24 Python
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python