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 header()函数使用说明
Jul 10 PHP
php安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
PHP在不同页面间传递Json数据示例代码
Jun 08 PHP
对PHP新手的一些建议(PHP学习经验总结)
Aug 20 PHP
PHP中的日期加减方法示例
Aug 21 PHP
php实现多城市切换特效
Aug 09 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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把小数转成整数3种方法
2014/06/30 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
WordPress中邮件的一些修改和自定义技巧
2015/12/15 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
xmlhttp缓存清除的2种解决方法
2013/12/13 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
vue2.x+webpack快速搭建前端项目框架详解
2017/11/30 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
详解如何在nuxt中添加proxyTable代理
2018/08/10 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
python不换行之end=与逗号的意思及用途
2017/11/21 Python
实例讲解Python爬取网页数据
2018/07/08 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python Django搭建网站流程图解
2020/06/13 Python
诚信贷款承诺书
2014/05/30 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
文体活动总结
2015/02/04 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
青春雷锋观后感
2015/06/10 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书