自己写的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 相关文章推荐
smarty section简介与用法分析
Oct 03 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
php实现过滤UBB代码的类
Mar 12 PHP
PHP session文件独占锁引起阻塞问题解决方法
May 12 PHP
php安装ssh2扩展的方法【Linux平台】
Jul 20 PHP
PHP用户注册邮件激活账户的实现代码
May 31 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
Yii Framework框架开发微信公众平台示例
Apr 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创建桌面快捷方式实现方法
2015/12/31 PHP
如何打开php的gd2库
2017/02/09 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
改变checkbox默认选中状态及取值的实现代码
2016/05/26 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
Vue实现选择城市功能
2017/05/27 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
angular2 ng2 @input和@output理解及示例
2017/10/10 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
Python生成器(Generator)详解
2015/04/13 Python
Python绘制七段数码管实例代码
2017/12/20 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python3 enum模块的应用实例详解
2019/08/12 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python中pow函数用法及功能说明
2020/12/04 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
大学生职业生涯规划书模板
2014/01/03 职场文书
学习委员自我鉴定
2014/01/13 职场文书
遥感技术与仪器求职信
2014/02/22 职场文书
青蓝工程实施方案
2014/03/27 职场文书
房屋租赁意向书
2014/04/01 职场文书
孝老爱亲模范事迹材料
2014/05/25 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
Vue+Flask实现图片传输功能
2022/04/01 Vue.js