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
php5 and xml示例
Nov 22 PHP
php smarty模版引擎中的缓存应用
Dec 11 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php 面试碰到过的问题 在此做下记录
Jun 09 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
基于php缓存的详解
May 15 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 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即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
浅析php变量修饰符static的使用
2013/06/28 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
PHP中mysqli_get_server_version()的实例用法
2020/02/03 PHP
一些技巧性实用js代码小结
2009/10/14 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
JS操作Cookie写入和读取实例代码
2013/10/20 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
js Calender控件使用详解
2015/01/05 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
原生js实现回复评论功能
2017/01/18 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
深入探究AngularJs之$scope对象(作用域)
2017/07/20 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python日期操作学习笔记
2008/10/07 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
Willer台湾:日本高速巴士/夜行巴士预约
2017/07/09 全球购物
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
中文系师范生自荐信
2013/10/01 职场文书
2016春节家属慰问信
2015/03/25 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
学校捐书倡议书
2015/04/27 职场文书
图书馆义工感想
2015/08/07 职场文书
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers