【PHP】指定した文字列の文字数を取得する方法

公開日:
更新日:
カテゴリー: PHP

PHPで指定した文字列の文字数を取得する方法を説明しています。

文字列の長さを取得

PHPで文字列の長さを取得する場合、「strlen関数」と「mb_strlen関数」を使います。

strlen関数

strlen関数は文字列の長さを取得する関数です。

strlen("ここに文字列");

引数で指定した文字列の長さを取得出来た場合はその数を、引数が空の場合は0を返します。

引数に配列を渡すと「null」を返し、E_WARNINGレベルのエラーが発生します。

サンプルプログラム

<?
//文字列1
$string1 = "abcde";
//文字列の長さを取得
echo strlen($string1);

//文字列2
$string2 = "a b c d e";
//文字列の長さを取得
echo strlen($string2);

//文字列3
$string3 = "abcあいう";
//文字列の長さを取得
echo strlen($string3);

//配列
$array[] = "abc";
$array[] = "def";
$array[] = "ghi";
//文字列の長さを取得
echo strlen($array);
?>

これを実行すると次のようになります。

5
9
12
Warning: strlen() expects parameter 1 to be string, array given in ***.php on line 23

ここで注目して欲しいのはstrlen関数にマルチバイト文字である日本語を指定した場合です。

「abcあいう」を指定してるので「6」という数を返して欲しいのですが、「12」という数が帰ってきます。

なぜ「6」じゃないのか?それはstrlen関数はマルチバイト文字に対応しておらず「バイト数」を返すからです。

【アテンション】
strlen関数は文字数ではなくバイト数を返すため、日本語文字列などのマルチバイト文字には対応していない
半角文字のみの文字列であれば問題ないが、マルチバイト文字である日本語文字列が含まれる場合は注意が必要

日本語文字列の文字数を取得

strlen関数はマルチバイト文字に対応していないため、マルチバイト文字が含まれる文字列を渡すと「文字数」ではなく「バイト数」が返ってきます。

そのため日本語文字列が含まれる文字列の正確な文字数を取得した場合はmb_strlen関数を使います。

mb_strlen関数

mb_strlen関数はstrlen関数と同様に文字列の長さを取得する関数です。

mb_strlen("ここに文字列", "ここに文字エンコーディング");

strlen関数と違う点は(適切な文字エンコーディングを指定している場合)半角文字であろうが全角文字(マルチバイト文字)であろうが1文字は「1」としてカウントしてくれます。

※mb_strlen関数は第2引数に文字エンコーディングを指定します(省略した場合は内部文字エンコーディングを使用)。

サンプルプログラム

<?
//文字列1
$string1 = "abcde";
//文字列の長さを取得
echo mb_strlen($string1, "UTF-8");

//文字列2
$string2 = "a b c d e";
//文字列の長さを取得
echo mb_strlen($string2, "UTF-8");

//文字列3
$string3 = "abcあいう";
//文字列の長さを取得
echo mb_strlen($string3, "UTF-8");

//配列
$array[] = "abc";
$array[] = "def";
$array[] = "ghi";
//文字列の長さを取得
echo mb_strlen($array, "UTF-8");
?>

これを実行すると、次にようになります。

5
9
6
Warning: mb_strlen() expects parameter 1 to be string, array given in ***.php on line 22

このようにmb_strlen関数を使うとマルチバイト文字である日本語文字列があっても正しい文字列が取得できます。

 

頑張って書いたのでちょろっと読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント