自己写的php中文截取函数mb_strlen和mb_substr
众所周知,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中文截取函数mb_strlen和mb_substr
-
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)
-
自己写的php中文截取函数mb_strlen和mb_substr,_PHP教程
-
PHP字符串截取函数strlen和mb_strlen的区别,strlenmb_strlen
-
支持中文和其他编码的php截取字符串函数分享_PHP教程
-
PHP字符串截取函数strlen和mb_strlen的区别,strlenmb_strlen
-
自己写的php中文截取函数mb_strlen和mb_substr
-
支持中文和其他编码的php截取字符串函数分享_PHP教程
-
支持中文和其他编码的php截取字符串函数分享(截取中文字符串)_PHP教程
-
PHP字符串截取函数strlen和mb_strlen的区别,strlenmb_strlen_PHP教程