BeWithYou

胡搞的技术博客

  1. 首页
  2. PHP
  3. 实现GBK和UTF8的按字节截取

实现GBK和UTF8的按字节截取


今天遇到需要按字节截取GBK和UTF8字符串的需求。记录一下代码片段。 ```php function substrMB($str, $minLen, $maxLen, $charset = "utf8", $append = false, $default = "") { $length = strlen($str); if ($length <= $minLen) { $str = $default; } elseif ($length <= $maxLen) { //DO NOTHING } else { $strLast = array(); $i = 0; if ($charset == "utf8") { while ($i < $maxLen) { $strTmp = substr($str, $i, 1); if (ord($strTmp) >= 240) {//11110000 $strTmp = substr($str, $i, 4); $i = $i + 4; } elseif (ord($strTmp) >= 224)//11100000 { $strTmp = substr($str, $i, 3); $i = $i + 3; } elseif (ord($strTmp) >= 192) //11000000 { $strTmp = substr($str, $i, 2); $i = $i + 2; } else { $i = $i + 1; } if ($i > $maxLen) { break; } $strLast[] = $strTmp; } $str = implode("", $strLast); if ($append) { $str .= $append; } } elseif ($charset == "gbk") { while ($i < $maxLen) { $strTmp = substr($str, $i, 1); if (ord($strTmp) > 127) { $strTmp = substr($str, $i, 2); $i += 2; } else { $i++; } if ($i > $maxLen) { break; } $strLast[] = $strTmp; } $str = implode("", $strLast); if ($append) { $str .= $append; } } } return $str; } ``` 思路是这样的: UTF8编码的字符串看首字节,开头几个1就是几字节。 GBK编码的字符串看首字节,大于127的就是2字节的。
回到顶部