Home  >  Article  >  php教程  >  自己写的php中文截取函数mb_strlen和mb_substr

自己写的php中文截取函数mb_strlen和mb_substr

WBOY
WBOYOriginal
2016-06-06 20:10:44944browse

这篇文章主要介绍了自己写的php中文截取函数mb_strlen和mb_substr,在服务器没mbstring库时可以使用本文函数代替,需要的朋友可以参考下

众所周知,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]                 ++$s;
            else {
                ++$s; // skip length
 
                while ($str[$s] >= "\x80" && $str[$s]                     ++$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]                     ++$e;
                else {
                    ++$e;//skip length
 
                    while ($str[$e] >= "\x80" && $str[$e]                         ++$e;
                }
            }
 
        return substr($str, $s, $e - $s);
    }
}

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn