Digital Acorn

プログラムやサーバーの設定など、技術的な記事を載せております。

PHP TIPS プログラミング

【PHP】 全角記号のときmb_strwidthが1を返す

投稿日:2016-01-05 更新日:

PHPで全角の判断に、mb_strwidthを使っていました。
mb_strwidth == (mb_strlen*2) だったら全角文字、みたいな。
そうしたら、「◎」を入れたらうまくいかないとクライアントから連絡がありました。

調査してみると意外な事実が!

PHPのmb_strwidthのマニュアルを読むと、全角記号は1を返すみたいですね。
(どんな仕様なんだろう・・・)
しょうがないので、
strlen(mb_convert_encoding($str, 'CP932', 'UTF-8')) == (mb_strlen($str)*2)
みたいな解決策になりました。

まずはCP932にしてからバイト数を得ることで、UTF-8の1~4バイトくらいに変動する全角のバイト数を揃えています。
これを全角を1文字に数えるmb_strlenに2を掛けて全部全角か判断するということですね。

中国語とか入ってくるとアウトですけどね。
その場合は、UTF-8を一文字ずつチェックしていくしかないんでしょうね。
(遠い目)

-PHP, TIPS, プログラミング


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

【BoW】mysql-serverが更新に失敗する

先ほどBoWでmysql-serverを更新したところ、更新に失敗しました。 調べてみたところ、以下のページが引っかかりました。 https://github.com/Microsoft/BashOn …

Windows 10のUbuntuでapacheなどを常駐させる

前書き 2017/10/18更新 Windows 10のCreators Updateが配信されました。 2017/10/18にFall Creators Updateが配信されました。 Bash o …

Windows10のバーチャルデスクトップの切り替えアニメーションを止める

プログラムなど開発業務に携わっていると、バーチャルデスクトップはありがたく感じる時がありますね。 一つでソースを出しておいて、一つでブラウザを出して、ショートカットで行ったり来たり・・・ (ちなみにシ …

エディタに最適なフォント

わたしはsublime text 3を使っています。 フォントをいろいろ探し回っていたんですが、結局「MS ゴシック」に戻ってしまいます。なぜなら、どれもフォントの描画がきれいでなく、横棒と縦棒の太さ …

QMAIL3でSSLエラーが出る

ずーと昔から同じメーラーを使っています。 QMAIL3というやつです。 Windows 10になってからSSLエラーが出るようになってしまいました。 それで、OpenSSLのバイナリを更新するという情 …

広告