当前位置: 首页 > 编程笔记 >

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

阴飞星
2023-03-14
本文向大家介绍自己写的php中文截取函数mb_strlen和mb_substr,包括了自己写的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 5.5版本的array_column()函数,包括了自己写的兼容低于PHP 5.5版本的array_column()函数的使用技巧和注意事项,需要的朋友参考一下 array_column 用于获取二维数组中的元素(PHP 5.5新增函数),但我们有时候需要在低版本的PHP环境中使用…

  • 本文向大家介绍php mb_substr()函数截取中文字符串应用示例,包括了php mb_substr()函数截取中文字符串应用示例的使用技巧和注意事项,需要的朋友参考一下 substr()函数用来截取字符串,但是对于中文字符会出现问题,而mb_substr()和mb_strcut这两个函数可以,用法与substr()相似,只是在函数最后要加入多一个参数,以设定字符串的编码,使用这两个函数需要在

  • 关于rust导入函数的问题,我的工程格式如下: src/main.rs src/api/api.rs api.rs 里有一个函数: pub async fn root() {} 问题是:我该如何在main.rs下调用这个root,我试过各种文档上的方法都不行。求助各位 知道怎么导入

  • 在Java你有很多列表函数。例如: List.size(),List.is空()... 是否有可能使我自己的函数,如List.null或空(),我怎么能做到这一点? 这会对我帮助很大。

  • 本文向大家介绍php截取字符串函数分享,包括了php截取字符串函数分享的使用技巧和注意事项,需要的朋友参考一下 经常看到有新手问PHP有没有类似asp的left函数或right函数,实现截取某字符串左边或右边开始N个字符的函数。答案当然是有的。PHP中的substr函数就可以做的到,只不过PHP把二个函数合二为一了,这里再给大家分享一个更加优秀的截取字符串的函数。 以上就是本文的全部内容,希望大家

  • 本文向大家介绍php自定义截取中文字符串-utf8版,包括了php自定义截取中文字符串-utf8版的使用技巧和注意事项,需要的朋友参考一下 先说明:网上目前有很多这个问题的代码,但是很多都是复制粘贴,没有自己实践,而且代码有逻辑问题,下面的代码由我自己编写。 话不多说 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!