概要
めったに必要な場面は無いけれど、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