We are ACORN!

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

PHP TIPS プログラミング

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

投稿日:2019-01-18 更新日:

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

メールアドレスが公開されることはありません。

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

関連記事

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

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

【WSL】PHPから送信するメールをテキストに保存する

テスト環境で使っていると、PHPのメール送信をテストしたい時があります。 かといって、実際に送信されてしまうと面倒です。 xamppにはmailtodiskというのがあり、メールをディスクに保存してく …

【PHP】WSL vs. Docker vs. Win32 環境別速度

PHPが複数環境で実行できるようになったので、速度を測定してみました。 マシンスペックは マシン Lenovo Thinkpad E460 プロセッサ Core i5-6200U @ 2.40GHz …

【PHP】 Macからの日本語名ファイルを正しく扱う

久しぶりに仕事ではまりました。 ファイルをアップロードして、その日本語名を利用するシステムなのですが、Macも含まれます。 それで、会社からMac miniを借りてダウンロード、アップロード実験をして …

WordPressのメインループ&サブループ

WordPressのテンプレートを作っていると、ループの構造で混乱してくる人がいます。 ですので、不要なHTMLを除いた、単純な構造を書いておこうと思います。 解説はコメントに書いています。 < …