自己写的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 时间计算问题小结
Jan 04 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
PHP用strstr()函数阻止垃圾评论(通过判断a标记)
Sep 28 PHP
php通过session防url攻击方法
Dec 10 PHP
php简单分页类实现方法
Feb 26 PHP
php在数组中查找指定值的方法
Mar 17 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
May 04 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
Sep 09 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
PHP回调函数简单用法示例
May 08 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
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
js前端日历控件(悬浮、拖拽、自由变形)
2017/03/02 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[00:34]DOTA2上海特级锦标赛 VG战队宣传片
2016/03/04 DOTA
Python性能优化的20条建议
2014/10/25 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
微信跳一跳python代码实现
2018/01/05 Python
Python简单I/O操作示例
2019/03/18 Python
在交互式环境中执行Python程序过程详解
2019/07/12 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
浅析python redis的连接及相关操作
2019/11/07 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
酒店保安员岗位职责
2014/01/31 职场文书
创新型城市实施方案
2014/03/06 职场文书
会计学专业求职信
2014/07/17 职场文书