自己写的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 相关文章推荐
开源SNS系统-ThinkSNS
May 18 PHP
php下关于中英数字混排的字符串分割问题
Apr 06 PHP
PHP获取url的函数代码
Aug 02 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
解析ajax事件的调用顺序
Jun 17 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
Jun 18 PHP
php中filter_input函数用法分析
Nov 15 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
Jan 29 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
PHP中文字符串截断无乱码解决方法
Oct 10 PHP
php实现base64图片上传方式实例代码
Feb 22 PHP
laravel框架中间件简单使用方法示例
Jan 25 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连接access数据库方法
2013/11/11 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
PHP学习笔记之session
2018/05/06 PHP
关于JS管理作用域的问题
2013/04/10 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
七个不允许错过的jQuery小技巧
2015/12/21 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
理解JavaScript原型链
2016/10/25 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
深入浅析Vue中的slots/scoped slots
2018/04/03 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
Python模块学习 filecmp 文件比较
2012/08/27 Python
python实现的一个火车票转让信息采集器
2014/07/09 Python
python数据结构之图的实现方法
2015/07/08 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
眼镜促销方案
2014/03/15 职场文书
高校教师个人总结
2015/02/10 职场文书
骨干教师个人总结
2015/02/11 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
亮剑观后感500字
2015/06/05 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js