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和AJAX创建RSS聚合器的代码
Mar 13 PHP
php设计模式 Strategy(策略模式)
Jun 26 PHP
理解PHP中的stdClass类
Apr 18 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
PHP使用递归生成文章树
Apr 21 PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 PHP
Yii统计不同类型邮箱数量的方法
Oct 18 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP代码重构方法漫谈
Apr 17 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 PHP
PHP实现递归的三种方法
Jul 04 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 var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
php mail to 配置详解
2014/01/16 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
python中assert用法实例分析
2015/04/30 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Python实现运行其他程序的四种方式实例分析
2017/08/17 Python
pandas中Timestamp类用法详解
2017/12/11 Python
对python 匹配字符串开头和结尾的方法详解
2018/10/27 Python
python dict 相同key 合并value的实例
2019/01/21 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
关于Python中定制类的比较运算实例
2019/12/19 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
pandas 数据类型转换的实现
2020/12/29 Python
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
电气自动化自荐信
2013/10/10 职场文书
妇产科护士自我鉴定
2013/10/15 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
聘用意向书
2014/07/29 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python