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 AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
php中禁止单个IP与ip段访问的代码小结
Jul 04 PHP
php身份证号码检查类实例
Jun 18 PHP
PHP制作用户注册系统
Oct 23 PHP
PHP中的数组处理函数实例总结
Jan 09 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
Laravel学习教程之model validation的使用示例
Oct 23 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
PHP使用pear自带的mail类库发邮件的方法
2015/07/08 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
js解析与序列化json数据(二)序列化探讨
2013/02/01 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
实例讲解python函数式编程
2014/06/09 Python
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
简单介绍Python中的try和finally和with方法
2015/05/05 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
Python读取properties配置文件操作示例
2018/03/29 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
python实现猜拳游戏
2020/03/04 Python
Python bytes string相互转换过程解析
2020/03/05 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
二年级语文教学反思
2014/02/02 职场文书
三分钟演讲稿事例
2014/03/03 职场文书
安全生产承诺书
2014/03/26 职场文书
应届大专毕业生自我鉴定
2014/04/08 职场文书
竞选部长演讲稿
2014/04/26 职场文书
工人先进事迹材料
2014/12/26 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
MongoDB使用场景总结
2022/02/24 MongoDB