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 数组实例说明
Aug 18 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
php session 写入数据库
Feb 13 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
Aug 11 PHP
PHP7标量类型declare用法实例分析
Sep 26 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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调用Webservice实例代码
2011/07/29 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
PHP实现验证码校验功能
2017/11/16 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
再说AutoComplete自动补全之实现原理
2011/11/05 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
JS焦点图,JS 多个页面放多个焦点图的实例
2016/12/08 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
js编写选项卡效果
2017/05/23 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
three.js实现圆柱体
2018/12/30 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
用Python实现命令行闹钟脚本实例
2016/09/05 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
python放大图片和画方格实现算法
2018/03/30 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Django实现分页显示效果
2019/10/31 Python
Django 简单实现分页与搜索功能的示例代码
2019/11/07 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
英国领先的杂志订阅网站:Magazine.co.uk
2018/01/25 全球购物
TripAdvisor日本:全球领先的旅游网站
2019/02/14 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
精彩的英文自荐信
2014/01/30 职场文书
学生会招新策划书
2014/02/14 职场文书
走群众路线学习笔记
2014/11/06 职场文书
导游词之昭君岛
2020/01/17 职场文书