自己写的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源代码
Oct 09 PHP
用PHP伪造referer突破网盘禁止外连的代码
Jun 15 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
php检测文件编码的方法示例
Apr 25 PHP
PHP Session机制简介及用法
Aug 19 PHP
php将数组存储为文本文件方法汇总
Oct 28 PHP
微信公众号模板消息群发php代码示例
Dec 29 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
Jul 13 PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 PHP
PHP RabbitMQ消息列队
May 11 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中的Session对象如何使用
2015/09/25 PHP
jquery cookie插件代码类
2009/05/26 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue实现循环切换动画
2018/10/17 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
Python使用爬虫猜密码
2016/02/19 Python
python相似模块用例
2016/03/04 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
Python JSON格式数据的提取和保存的实现
2019/03/22 Python
python3.7简单的爬虫实例详解
2019/07/08 Python
pandas分组聚合详解
2020/04/10 Python
python实现猜单词游戏
2020/05/22 Python
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
党的群众路线教育实践活动查摆问题自查报告
2014/10/10 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
离婚被告代理词
2015/05/23 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis