自己写的php中文截取函数mb_strlen和mb_substr


Posted in PHP onFebruary 09, 2015

众所周知,php 自带的 strlen 与 substr 函数没法处理中文字符,于是,我们会用 mb_ 系列函数替代。但是,没有 mbstring 库怎么办?这就需要我们自己写一个来替代了,废话不多说,先上代码:

if ( !function_exists('mb_strlen') ) {

 function mb_strlen ($text, $encode) {

  if ($encode=='UTF-8') {

   return preg_match_all('%(?:

       [\x09\x0A\x0D\x20-\x7E]           # ASCII

     | [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte

     |  \xE0[\xA0-\xBF][\x80-\xBF]       # excluding overlongs

     | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte

     |  \xED[\x80-\x9F][\x80-\xBF]       # excluding surrogates

     |  \xF0[\x90-\xBF][\x80-\xBF]{2}    # planes 1-3

     | [\xF1-\xF3][\x80-\xBF]{3}         # planes 4-15

     |  \xF4[\x80-\x8F][\x80-\xBF]{2}    # plane 16

     )%xs',$text,$out);

  }else{

   return strlen($text);

  }

 }

}
/* from Internet, author unknown */

if (!function_exists('mb_substr')) {

    function mb_substr($str, $start, $len = '', $encoding="UTF-8"){

        $limit = strlen($str);

 

        for ($s = 0; $start > 0;--$start) {// found the real start

            if ($s >= $limit)

                break;

 

            if ($str[$s] <= "\x7F")

                ++$s;

            else {

                ++$s; // skip length

 

                while ($str[$s] >= "\x80" && $str[$s] <= "\xBF")

                    ++$s;

            }

        }

 

        if ($len == '')

            return substr($str, $s);

        else

            for ($e = $s; $len > 0; --$len) {//found the real end

                if ($e >= $limit)

                    break;

 

                if ($str[$e] <= "\x7F")

                    ++$e;

                else {

                    ++$e;//skip length

 

                    while ($str[$e] >= "\x80" && $str[$e] <= "\xBF" && $e < $limit)

                        ++$e;

                }

            }

 

        return substr($str, $s, $e - $s);

    }

}
PHP 相关文章推荐
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
vs中通过剪切板循环来循环粘贴不同内容
Apr 30 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 PHP
PHP中copy on write写时复制机制介绍
May 13 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
smarty循环嵌套用法示例分析
Jul 19 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 PHP
php构造函数的继承方法
Feb 09 #PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 #PHP
php抽象类使用要点与注意事项分析
Feb 09 #PHP
PHP中的socket_read和socket_recv区别详解
Feb 09 #PHP
支持png透明图片的php生成缩略图类分享
Feb 08 #PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 #PHP
php中get_object_vars()方法用法实例
Feb 08 #PHP
You might like
php foreach、while性能比较
2009/10/15 PHP
php析构函数的简单使用说明
2015/08/24 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
JS给swf传参数的实现方法
2016/09/13 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
微信小程序实现tab和swiper切换结合效果
2020/07/17 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
Django 开发环境配置过程详解
2019/07/18 Python
深入了解python中元类的相关知识
2019/08/29 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Python序列化pickle模块使用详解
2020/03/05 Python
详解scrapy内置中间件的顺序
2020/09/28 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
信息部岗位职责
2013/11/12 职场文书
少儿节目主持串词
2014/04/02 职场文书
出纳年终工作总结2014
2014/12/05 职场文书
学术会议通知范文
2015/04/15 职场文书
刮痧观后感
2015/06/05 职场文书
工商行政处罚决定书
2015/06/24 职场文书
大学生入党自我鉴定范文
2019/06/21 职场文书
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL