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

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

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

関連記事

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

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

Google Bookmarksを利用するChrome拡張機能

暇なときにGoogle Bookmarksを利用するプラグインを作ってみました。 最低限のことしか出来ないのですが、自分で使う分にはこれで必要十分です。 Gブックマーク もしよろしかったら使ってみてく …

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

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

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

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

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

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