自己写的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和ACCESS写聊天室(三)
Oct 09 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP 引用是个坏习惯
Mar 12 PHP
PHP安全防范技巧分享
Nov 03 PHP
php在服务器执行exec命令失败的解决方法
Mar 03 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
解析strtr函数的效率问题
Jun 26 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
ThinkPHP之用户注册登录留言完整实例
Jul 22 PHP
PHP中Http协议post请求参数
Nov 02 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
Oct 24 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 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
Avengerls vs KG BO3 第二场2.18
2021/03/10 DOTA
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
JS实现页面内跳转的简单代码
2017/09/03 Javascript
js实现移动端吸顶效果
2020/01/08 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
[01:13]2015国际邀请赛线下观战现场
2015/08/08 DOTA
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
使用python画社交网络图实例代码
2019/07/10 Python
Python中函数的返回值示例浅析
2019/08/28 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
Tensorflow 多线程设置方式
2020/02/06 Python
Python同时迭代多个序列的方法
2020/07/28 Python
python 怎样进行内存管理
2020/11/10 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
医德医风自我评价
2014/09/19 职场文书
2014年重阳节老干部座谈会局领导发言稿
2014/09/25 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
Java 定时任务技术趋势简介
2022/05/04 Java/Android