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

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

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

関連記事

Excelでフリガナを取得する

開発でテストデータを作る機会があります。 その時にフリガナを入れなければならない場合があります。漢字のテストデータはありますが、フリガナを振っていない場合、手入力で入れるのは至難の業です。(何百件もあ …

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

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

Thinkpad E460のSSD不具合と復旧

昨日今日で本当に大変な目にあいました。 昨日の夜はもうダメかと思いました。 つい先日Thinkpad E460を購入しました。Lenovoはあんまり評判が良くない(スパイウェアを忍ばせてたりした)ので …

【PHP】DBライブラリ 「idiorm」

フレームワークを使うには簡単すぎる、かといってPDOを使ってガリガリ書くのは面倒。 そんな時に役立つライブラリが「idiorm」です。(なんて読むんでしょうか?) GitHubで公開しています。 ht …

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

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