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的5个入手程序
Nov 23 PHP
php 删除cookie和浏览器重定向
Mar 16 PHP
php 中英文语言转换类
Sep 07 PHP
非常好用的两个PHP函数 serialize()和unserialize()
Feb 04 PHP
解析PHP中常见的mongodb查询操作
Jun 20 PHP
浅析PKI加密解密 OpenSSL
Jul 01 PHP
php取整函数ceil,floo,round的用法及介绍
Aug 31 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
PHP数据库处理封装类实例
Dec 24 PHP
Laravel接收前端ajax传来的数据的实例代码
Jul 20 PHP
redis+php实现微博(三)微博列表功能详解
Sep 23 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+Html+缓存
2006/12/20 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
2011/05/07 PHP
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
js form 验证函数 当前比较流行的错误提示
2009/06/23 Javascript
如何使用JS获取IE上传文件路径(IE7,8)
2013/07/08 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
基于javascript实现文字无缝滚动效果
2016/03/22 Javascript
react-router中的属性详解
2017/06/01 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
angular实现spa单页面应用实例
2017/07/10 Javascript
微信小程序template模版的使用方法
2019/04/13 Javascript
JS中getElementsByClassName与classList兼容性问题解决方案分析
2019/08/07 Javascript
Python的动态重新封装的教程
2015/04/11 Python
Python 中 Meta Classes详解
2016/02/13 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
自动化专业职业生涯规划书范文
2014/01/16 职场文书
行政主管职责范本
2014/03/07 职场文书
倡议书格式
2014/08/30 职场文书
简爱电影观后感
2015/06/10 职场文书
2016公司年会主持词
2015/07/01 职场文书
办公室日常管理制度
2015/08/04 职场文书
公司中层管理培训心得体会
2016/01/11 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书