自己写的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 服务器调试 Zend Debugger 的安装教程
Sep 25 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
php使用date和strtotime函数输出指定日期的方法
Nov 14 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
PHP使用PDO连接ACCESS数据库
Mar 05 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
Mar 27 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
php compact 通过变量创建数组
Nov 15 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
Oct 15 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
在普通HTTP上安全地传输密码
2007/07/21 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
PHP微信红包API接口
2015/12/05 PHP
php session实现多级目录存放实现代码
2016/02/03 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
深入浅出讲解ES6的解构
2016/08/03 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
python判断字符串是否纯数字的方法
2014/11/19 Python
Python 实现简单的电话本功能
2015/08/09 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
pywinauto自动化操作记事本
2019/08/26 Python
python实现坦克大战
2020/04/24 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python3.9实现pyinstaller打包python文件成exe
2020/12/13 Python
国际象棋商店:The Chess Store
2018/07/09 全球购物
银河香水:Galaxy Perfume
2019/03/25 全球购物
阿巴庭院:Abba Patio
2019/06/18 全球购物
数控专业推荐信范文
2013/12/02 职场文书
《都江堰》教学反思
2014/02/07 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
军训自我鉴定200字
2014/02/13 职场文书
元旦联欢会主持词
2014/03/26 职场文书
物理学专业求职信
2014/07/04 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
统招统分证明
2015/06/23 职场文书
手残删除python之后的补救方法
2021/06/26 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL