自己写的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 10 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
php实现excel中rank函数功能的方法
Jan 20 PHP
PHP+MySQL插入操作实例
Jan 21 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
PHP递归调用数组值并用其执行指定函数的方法
Apr 01 PHP
深入理解PHP类的自动载入机制
Sep 16 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
php微信分享到朋友圈、QQ、朋友、微博
Feb 18 PHP
php pdo连接数据库操作示例
Nov 18 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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
PHP4之真OO
2006/10/09 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
Bootstrap实现默认导航栏效果
2020/09/21 Javascript
JavaScript中的this机制
2016/01/30 Javascript
js获取浏览器高度 窗口高度 元素尺寸 偏移属性的方法
2016/11/21 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
pm2 部署 node的三种方法示例
2017/10/20 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
详解vue路由
2020/08/05 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
python提取页面内url列表的方法
2015/05/25 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
如何用python整理附件
2018/05/13 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
Selenium控制浏览器常见操作示例
2018/08/13 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
英国床垫在线:Mattress Online
2016/12/07 全球购物
Chupi官网:在爱尔兰手工制作的订婚、结婚戒指和精美珠宝
2020/09/28 全球购物
销售高级职员求职信
2013/10/29 职场文书
企业晚会策划方案
2014/05/29 职场文书
学习党的群众路线对照检查材料
2014/09/29 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书