这是一个截取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码的数字或字符