このタイトルをみて、カウントがぶれるという話とご想像がつく方も多いと思いますが、まさにその通りです。

strlen()で全角文字のバイト数がぶれる

UTF-8環境でPHPのstrlen関数を使って全角文字をカウントすると、全角文字が2バイトではなく1から6バイトとしてカウントがされてしまいます。この開発日誌を読み直してみたところ、1年前くらいにサイトの文字コードをSJISからUTF-8に変えておりました。

UTF-8をSJISに変更してからカウント

解決方法はいたってシンプルで、strlen()を使う時には文字コードをSJISに強引に変えてしまえば問題ありません。

strlen(mb_convert_encoding($text,"SJIS","UTF-8"))

放置していた画像掲示板を手入れした際に、文字のカウントがどうもおかしいとは思っておりましたが、やっと修正をすることができました。

imgbbs_201109.gif
当時の画像掲示板の泉イメージ

おわりに

画像掲示板は少しずつ書き込みが増えてきたので、せっかくなのでサブドメイン化をして、ディレクトリ型検索エンジンdtnと分けた別サイトに仕立ててみましたこれに合わせてデザインも多少変えて、サイト名も画像掲示板の泉に変更しました。

ゼロから作った掲示板プログラムですので、まだまだ不具合が多いとは思いますが、よろしくお願いいたします。