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 相关文章推荐
PHP新手上路(二)
Oct 09 PHP
PHP 文章中的远程图片采集到本地的代码
Jul 30 PHP
php set_time_limit(0) 设置程序执行时间的函数
May 26 PHP
PHP数组实例总结与说明
Aug 23 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
php无限级分类实现方法分析
Oct 19 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
Symfony查询方法实例小结
Jun 28 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
Jan 28 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
php array_map()函数实例用法
Mar 03 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
通过具体程序来理解PHP里面的抽象类
2010/01/28 PHP
CodeIgniter表单验证方法实例详解
2016/03/03 PHP
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
基于vue、react实现倒计时效果
2019/08/26 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
element 动态合并表格的步骤
2020/12/31 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python 实时遍历日志文件
2016/04/12 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
分享vim python缩进等一些配置
2018/07/02 Python
flask中过滤器的使用详解
2018/08/01 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
新加坡鲜花速递/新加坡网上花店:Ferns N Petals
2020/08/29 全球购物
迟到检讨书1000字
2014/01/15 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
音乐剧猫观后感
2015/06/04 职场文书
秋季运动会加油词
2015/07/18 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书