【PHP】UTF8で文字数を半角0.5、全角1で区別してカウントする方法

スポンサーリンク

PHPで日本語文字をカウントする事ってしょっちゅうあると思うんだけど、今や時代はUTF-8主流!

ちなみにUTF8のようなマルチバイト文字の場合、
shift-jisのように半角が1バイト、全角が2バイトではなく、半角でも3バイトあったり(「半角カナ」とか)全角で6バイトあったり(「バ」や「ぎ」などの結合文字)と、もう今までの概念が通用しないようだw

ということで、UTF8で半角文字、全角文字をちゃんと区別してカウントしてくれる方法を調査した♪

 

スポンサーリンク

最良のコードに行き着いた

探してみると、strlenやらmb_strlenやらを駆使して何やらいろんな書き方をしてるページが色々とあったけど、結局のところshift-jisではOKでもUTF-8ではダメダメだった。

で結果、以下にたどり着いて解決♪

mb_strwidth($hoge,'UTF-8')/2

 

この方法で全角文字を1、半角文字を0.5としてカウントしてくれる。

例を挙げるとこんな感じ♪

$hoge ="あいうえおtest1";
$piyo = mb_strwidth($hoge,'UTF-8')/2;

echo $piyo; //7.5と表示される

ちなみにmb_strwidthは、正確には文字幅を取得するものらしいんだけど、詳しく知りたい人は以下。

PHP: mb_strwidth - Manual

コメント