自己写的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 file_get_contents 函数超时的几种解决方法
Jul 30 PHP
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
Jun 03 PHP
Yii中render和renderPartial的区别
Sep 03 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
PHP list() 将数组中的值赋给变量的简单实例
Jun 13 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
May 26 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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(2)
2006/10/09 PHP
php的array数组和使用实例简明教程(容易理解)
2014/03/20 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
JQuery实现简单验证码提示解决方案
2012/12/20 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
javascript适合移动端的日期时间拾取器
2015/11/10 Javascript
JavaScript中值类型和引用类型的区别
2017/02/23 Javascript
jQuery第一次运行页面默认触发点击事件的实例
2018/01/10 jQuery
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python中的asyncio代码详解
2019/06/10 Python
Python列表删除元素del、pop()和remove()的区别小结
2019/09/11 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
微博营销计划书
2014/01/10 职场文书
巡警年度自我鉴定
2014/02/21 职场文书
文秘求职信范文
2014/04/10 职场文书
慈善晚会策划方案
2014/05/14 职场文书
教师节宣传方案
2014/05/23 职场文书
会计学专业自荐信
2014/06/25 职场文书
上诉状格式
2015/05/23 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
JDBC连接的六步实例代码(与mysql连接)
2021/05/12 MySQL
html5调用摄像头实例代码
2021/06/28 HTML / CSS
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android