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面向对象全攻略 (十二) 抽象方法和抽象类
Sep 30 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
php实现搜索类封装示例
Mar 31 PHP
PHP实现的进度条效果详解
May 03 PHP
PHP 信号管理知识整理汇总
Feb 19 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP更安全的密码加密机制Bcrypt详解
Jun 18 PHP
Laravel 加载第三方类库的方法
Apr 20 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
js setTimeout 常见问题小结
2013/08/13 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
jQuery动态修改超链接地址的方法
2015/02/13 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
11种ASP连接数据库的方法
2015/09/18 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
2018/04/22 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
javascript实现倒计时提示框
2021/03/02 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
Python计算已经过去多少个周末的方法
2015/07/25 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
Python简单生成随机数的方法示例
2018/03/31 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
现代化办公人员工作的自我评价
2013/10/16 职场文书
商务英语专业毕业生自荐信
2013/11/05 职场文书
学生实习推荐信范文
2013/11/26 职场文书
关于旷工的检讨书
2014/02/02 职场文书
趣味体育活动方案
2014/02/08 职场文书
国贸专业自荐信范文
2014/03/02 职场文书
大班开学家长寄语
2014/04/04 职场文书
战略合作协议书范本
2014/04/18 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书