php截取字符串之截取utf8或gbk编码的中英文字符串示例


Posted in PHP onMarch 12, 2014

微博的发言有字数限制,其计数方式是,中文算2个,英文算1个,全角字符算2个,半角字符算1个。
php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求。
mb_strlen 可以根据字符集计算长度,比如utf8的中文计数为1,但这不符合微博字数限制需求,中文必须计算为2才可以。
google了下,找到一个discuz中截取各种编码字符的类,改造了下,已经测试通过.其中参数$charset 只支持gbk与utf-8。

$a = "s@@你好";
var_dump(strlen_weibo($a,'utf-8'));

结果输出为8,其中字母s计数为1,全角@计数为2,半角@计数为1,两个中文计数为4。源码如下:

function strlen_weibo($string, $charset='utf-8')
{
    $n = $count = 0;
    $length = strlen($string);
    if (strtolower($charset) == 'utf-8')
    {
        while ($n < $length)
        {
            $currentByte = ord($string[$n]);
            if ($currentByte == 9 ||
                $currentByte == 10 ||
                (32 <= $currentByte && $currentByte <= 126))
            {
                $n++;
                $count++;
            } elseif (194 <= $currentByte && $currentByte <= 223)
            {
                $n += 2;
                $count += 2;
            } elseif (224 <= $currentByte && $currentByte <= 239)
            {
                $n += 3;
                $count += 2;
            } elseif (240 <= $currentByte && $currentByte <= 247)
            {
                $n += 4;
                $count += 2;
            } elseif (248 <= $currentByte && $currentByte <= 251)
            {
                $n += 5;
                $count += 2;
            } elseif ($currentByte == 252 || $currentByte == 253)
            {
                $n += 6;
                $count += 2;
            } else
            {
                $n++;
                $count++;
            }
            if ($count >= $length)
            {
                break;
            }
        }
        return $count;
    } else
    {
        for ($i = 0; $i < $length; $i++)
        {
            if (ord($string[$i]) > 127)
            {
                $i++;
                $count++;
            }
            $count++;
        }
        return $count;
    }
}
PHP 相关文章推荐
php header示例代码(推荐)
Sep 08 PHP
ThinkPHP写第一个模块应用
Feb 20 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
PHP文件上传操作实例详解
Sep 27 PHP
php生成0~1随机小数的方法(必看)
Apr 05 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
Jun 19 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
Jan 23 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 PHP
php实现快速排序的三种方法分享
Mar 12 #PHP
php二分查找二种实现示例
Mar 12 #PHP
php遍历文件夹和文件列表示例分享
Mar 11 #PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 #PHP
php上传图片存入数据库示例分享
Mar 11 #PHP
php使用反射插入对象示例分享
Mar 11 #PHP
php数组编码转换示例详解
Mar 11 #PHP
You might like
PHP 程序授权验证开发思路
2009/07/09 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php数组去重复数据示例
2014/02/25 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
php实现记事本案例
2020/10/20 PHP
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
JavaScript中用getDate()方法返回指定日期的教程
2015/06/09 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
2015/08/24 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
异步加载JS、CSS代码(推荐)
2016/06/15 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
原生JS实现日历组件的示例代码
2017/09/22 Javascript
送你43道JS面试题(收藏)
2019/06/17 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
浅谈Python type的使用
2019/11/19 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
婚礼秀策划方案
2014/05/19 职场文书
竞选班干部演讲稿500字
2014/08/20 职场文书
小学老师对学生的评语
2014/12/29 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
浅析Python实现DFA算法
2021/06/26 Python
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
python数字图像处理之图像的批量处理
2022/06/28 Python