UTF-8 でマルチバイト文字は3バイトとして数えられます。PHP の strlen で数える場合に、英数字なら1バイトですが、日本語などのマルチバイト文字だと3バイトが帰ってきて、半角・全角の計算が難しくなります。
対処方法としまして、最近思いついたんですが、一度文字列を Shift-JIS に変換してから文字数の計算を行います。
1 | strlen(mb_convert_encoding($bar, "sjis")); |
こうすることで、マルチバイト文字は2バイト、半角英数字なら1バイトで取得できるようになり、半角・全角の計算を行えます。半角・全角なんて久しぶりに聞きましたが、拘る人は拘るようなので、ひとつ覚えておきたいところですね。
コメント