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中$_SERVER的详细参数与说明
Jul 29 PHP
Ha0k 0.3 PHP 网页木马修改版
Oct 11 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
input file获得文件根目录简单实现
Apr 26 PHP
php session_start()出错原因分析及解决方法
Oct 28 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
php+redis实现多台服务器内网存储session并读取示例
Jan 12 PHP
PHP钩子实现方法解析
May 21 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 PHP
laravel使用redis队列实例讲解
Mar 23 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 06 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使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
TP5(thinkPHP5框架)基于bootstrap实现的单图上传插件用法示例
2019/05/29 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
Javascript setInterval的两种调用方法(实例讲解)
2013/11/29 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
python批量下载抖音视频
2019/06/17 Python
python函数与方法的区别总结
2019/06/23 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
销售行政专员职责
2014/01/03 职场文书
护理专业自我鉴定
2014/01/30 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
公务员年度考核评语
2014/12/31 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
详解Python 3.10 中的新功能和变化
2021/04/28 Python
dubbo服务整合zipkin详解
2021/07/26 Java/Android
nginx内存池源码解析
2021/11/20 Servers
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python