1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

UTF-8で全角を2、半角を1とカウントしたい場合はmb_strwidthを使う

Last updated at Posted at 2022-09-02

概要

めったに必要な場面は無いけれど、UTF-8で入力した文字列をShift-JISで送信する際に、上限バイト数の制限が必要な場面があり文字数が揃わなかったので迷いました。
UTF-8は可変バイト数?らしく1文字3バイトとカウントされたりする。

関数

strlen = 文字列のバイト数を取得(文字コードによって変わる)

mb_strwidth = 文字列の幅を取得(全角は2、半角は1とカウント)

(追記:2022-09-03 0:01)コメントいただきましたが、 mb_strwidth だとギリシャ文字、ロシア文字などは全角の文字でも1とカウントされるみたいです。
日本語以外や、日本語でも記号などが含まれる文字列の場合は、想定した動きにならない可能性があるのでご注意ください。

strlen

文字コードがShift-JISの場合

php
echo strlen("あいうえお");
// 10

echo strlen("ABCDE");
// 5

文字コードがUTF-8の場合

php
echo strlen("あいうえお");
// 15

echo strlen("ABCDE");
// 5

mb_strwidth

文字コードがShift-JISの場合

php
echo mb_strwidth("あいうえお");
// 10

echo mb_strwidth("ABCDE");
// 5

文字コードがUTF-8の場合

php
echo mb_strwidth("あいうえお");
// 10

echo mb_strwidth("ABCDE");
// 5
1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?