www.adminn.cn
站长正能量分享网!

php截取字符串之截取utf8或gbk编码的中英文字符串示例

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求,下面给大家提供一个方法来完成这样的功能。

微博的发言有字数限制,其计数方式是,中文算2个,英文算1个,全角字符算2个,半角字符算1个。

php中自带strlen是返回的字节数,对于utf8编码的中文返回时3个,不满足需求。

mb_strlen 可以根据字符集计算长度,比如utf8的中文计数为1,但这不符合微博字数限制需求,中文必须计算为2才可以。

google了下,找到一个discuz中截取各种编码字符的类,改造了下,已经测试通过.其中参数$charset 只支持gbk与utf-8,代码如下:

  1. $a = "s@@你好"
  2. var_dump(strlen_weibo($a,'utf-8')); 

结果输出为8,其中字母s计数为1,全角@计数为2,半角@计数为1,两个中文计数为4,源码如下:

  1. function strlen_weibo($string$charset='utf-8'
  2.     $n = $count = 0; 
  3.     $length = strlen($string); 
  4.     if (strtolower($charset) == 'utf-8'
  5.     { 
  6.         while ($n < $length
  7.         { 
  8.             $currentByte = ord($string[$n]); 
  9.             if ($currentByte == 9 || 
  10.                 $currentByte == 10 || 
  11.                 (32 <= $currentByte && $currentByte <= 126)) 
  12.             { 
  13.                 $n++; 
  14.                 $count++; 
  15.             } elseif (194 <= $currentByte && $currentByte <= 223) 
  16.             { 
  17.                 $n += 2; 
  18.                 $count += 2; 
  19.             } elseif (224 <= $currentByte && $currentByte <= 239) 
  20.             { 
  21.                 $n += 3; 
  22.                 $count += 2; 
  23.             } elseif (240 <= $currentByte && $currentByte <= 247) 
  24.             { 
  25.                 $n += 4; 
  26.                 $count += 2; 
  27.             } elseif (248 <= $currentByte && $currentByte <= 251) 
  28.             { 
  29.                 $n += 5; 
  30.                 $count += 2; 
  31.             } elseif ($currentByte == 252 || $currentByte == 253) 
  32.             { 
  33.                 $n += 6; 
  34.                 $count += 2; 
  35.             } else 
  36.             { 
  37.                 $n++; 
  38.                 $count++; 
  39.             } 
  40.             if ($count >= $length
  41.             { 
  42.                 break
  43.             } 
  44.         } 
  45.         return $count
  46.     } else 
  47.     { 
  48.         for ($i = 0; $i < $length$i++) 
  49.         { 
  50.             if (ord($string[$i]) > 127) 
  51.             { 
  52.                 $i++; 
  53.                 $count++; 
  54.             } 
  55.             $count++; 
  56.         } 
  57.         return $count
  58.     } 

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《php截取字符串之截取utf8或gbk编码的中英文字符串示例》
文章链接:https://www.adminn.cn/news/8575.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

扫码支付后请联系右侧QQ发送下载地址!!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏