日期:2014-05-17  浏览次数:20537 次

截取GBK字符串的问题~~~~
这是一个截取GBK字符串的函数:
PHP code

function  gb_substr( $str ,  $len ){        
      $count  = 0;        
      for ( $i =0;  $i < strlen ( $str );  $i ++){        
          if ( $count  ==  $len )  break ;        
          if (preg_match( "/[\x80-\xff]/" ,  substr ( $str ,  $i , 1))){
        ++ $i ;
          }        
          ++ $count ;                
      }        
      return   substr ( $str , 0,  $i );        
}



我的问题是,GBK和GB2312每个字符不肯定是2个字节吗?那直接用要截取的长度*2不完了吗?
比如我要截取3个字符:3*2=6 也就是我要截取到6的位置。

这么想对吗?

------解决方案--------------------
使用mb系列函数,GBK对非ASCII两个字符,ASCII还是1个字节。
------解决方案--------------------
不对,因为有可能含ascii码的数字或字符

探讨
这是一个截取GBK字符串的函数:
PHP code

function gb_substr( $str , $len ){
$count = 0;
for ( $i =0; $i < strlen ( $str ); $i ++){
if ( $count == $len ) break……