GBK 文字列のインターセプトの問題~~~~
これは GBK 文字列をインターセプトする関数です:
PHP コード
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->
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 と Is' です。 GB2312 の各文字は間違いなく 2 バイトですか?あとはインターセプトされる長さ *2 を使って終了するだけですか?
たとえば、3 文字をインターセプトしたい: 3*2=6、つまり 6 の位置をインターセプトしたいとします。
そうですか?
-----解決策---------
mb シリーズ関数を使用すると、GBK は 2 つの非 ASCII 文字を扱いますが、ASCII は 1 バイトのままです。
------解決策------------------
間違っています。ASCII コードを含む数字や文字が含まれている可能性があります。