文字数の取得とバイト数の取得
文字数の取得
$str = "こんにちは";
// 文字数を取得
$result = mb_strlen($str);
// 出力 var_dump($result);
出力結果
int(5)
バイト数の取得
$str = "こんにちは";
// バイト数
$result = strlen($str);
// 出力
var_dump($result);
出力結果
int(15)
出力結果を見るとなんと「15バイト」でした。
「10バイト」じゃない???
半角文字列が「1バイト」、全角文字列が「2バイト」なんて単純に考えていましたが、
PHPのstrlenはそう単純ではないようです・・・。
どうしたことかと思い調べてみると
文字コードが「UTF-8」の場合、一文字「3バイト」としてカウントされるようです。
「Shift_JIS」の場合、全角文字列がしっかりと「2バイト」としてカウントされるようです。
なので、「UTF-8」から「Shift_JIS」に変換した上でバイト数をカウントしてあげましょう。
文字コードを変更してバイト数の取得
$str = "こんにちは";
// 文字コードを「UTF-8」から「Shift_JIS」へ変換してからバイト数を取得
$result = strlen(mb_convert_encoding($str, 'SJIS', 'UTF-8') );
// 出力 var_dump($result);
出力結果
int(10)
ポイント
文字コードを「Shift_JIS」に変換してバイト数を取得することで、
全角文字列を「2バイト」としてカウントしてもらえることを覚えておきましょう。