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类
Jul 15 PHP
PHP+MYSQL的文章管理系统(二)
Oct 09 PHP
php smarty函数扩展
Mar 15 PHP
php存储过程调用实例代码
Feb 03 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
yiic命令时提示“php.exe”不是内部或外部命令的解决方法
Dec 18 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
Nov 22 PHP
Memcached介绍及php-memcache扩展安装
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
php 过滤器实现代码
2010/08/09 PHP
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP+JS三级菜单联动菜单实现方法
2016/02/24 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
Javascript的匿名函数小结
2009/12/31 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
Javascript数组与字典用法分析
2014/12/13 Javascript
Wireshark基本介绍和学习TCP三次握手
2016/08/15 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
pygame实现弹球游戏
2020/04/14 Python
django正续或者倒序查库实例
2020/05/19 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
高考自主招生自荐信
2013/10/20 职场文书
客服部工作职责范本
2014/02/14 职场文书
2014年仓库管理员工作总结
2014/11/18 职场文书
2014年行政部工作总结
2014/11/19 职场文书
复活读书笔记
2015/06/29 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
实操Python爬取觅知网素材图片示例
2021/11/27 Python
MySQL GTID复制的具体使用
2022/05/20 MySQL