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

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

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

関連記事

さくらのレンタルサーバーでスパムフィルタを書く

最近、さくらのレンタルサーバーでスパムが多くて参ってました。 「hi」とか「hey」とかのタイトルのやつです。 他にも困っている人がいないかなぁ、と思ってググると、ありました。 rambler.ruが …

MySQL VIEWの一覧

MySQLでVIEWの一覧が欲しいなぁ・・・と思ったら、以下のSQLで可能。 SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.views …

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

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

【PHP】ビルトインウェブサーバーで楽々テスト環境

teratailで質問に答えるようになったら、以外にサーバー立てずにテストして、ローカル制限に引っかかっている人が多いので、簡単に立てられるローカルサーバーの構築方法を書いておこうと思います。 まず、 …

margin?padding?

HTMLコーディングでの余白の付け方

HTMLコーディング初学者で良くあるのが、カンプからHTMLにするところまではうまく行くものの余白の付け方がうまく行かない、ということかもしれません。 余白をどのように付ければ良いのでしょうか。