自己写的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 5.0对象模型深度探索之绑定
Sep 05 PHP
多文件上传的例子
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
将FCKeditor导入PHP+SMARTY的实现方法
Jan 15 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
Jun 10 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
php写一个函数,实现扫描并打印出自定目录下(含子目录)所有jpg文件名
May 26 PHP
PHP使用数组实现矩阵数学运算的方法示例
May 29 PHP
PHP isset()及empty()用法区别详解
Aug 29 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字符转义相关函数小结(php下的转义字符串)
2007/04/12 PHP
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
php SQL Injection with MySQL
2011/02/27 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
jQuery学习总结之元素的相对定位和选择器(持续更新)
2011/04/26 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
对Js OOP编程 创建对象的一些全面理解
2016/07/26 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
Python strip lstrip rstrip使用方法
2008/09/06 Python
python函数形参用法实例分析
2015/08/04 Python
简单学习Python time模块
2016/04/29 Python
Python 做曲线拟合和求积分的方法
2018/12/29 Python
Python算法中的时间复杂度问题
2019/11/19 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
Python 文件数据读写的具体实现
2020/01/24 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
Python爬虫获取页面所有URL链接过程详解
2020/06/04 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
行政助理岗位职责
2013/11/10 职场文书
工程业务员工作职责
2013/12/07 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
郭明义观后感
2015/06/08 职场文书
2019消防宣传标语!
2019/07/10 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
js中Object.create实例用法详解
2021/10/05 Javascript