はじめに
掲示板やブログ等でよくある名前欄やコメント欄で入力可能文字数を制限する時、文字数の判定の為に文字数を取得しなければならない場面があります。
今回はPHPで文字数を取得し、入力可能文字数を制限してみます。
作業環境
PHP(7.0.0)
strlen関数は文字列の長さを取得しても文字数を返すわけではない
以前strlen関数を別の入力欄の文字数を制限する為に使ったことがあり、同じ要領でできると思い、特に何も考えずにそのまま使ってみたものの上手くいきませんでした。
調べてみると、strlen関数は文字列の長さを取得しますが、返すのは文字数ではなく、バイト数でした。
文字数を返すのは何か
調べを進めていくと、mb_strlenという関数に辿り着きました。
これは文字列の長さを取得し、文字数を返すのですが、1文字が2バイト以上であるマルチバイト文字は1文字として返します。これにより、全角の文字数の判定にも対応できるということが分かります。
実際に使ってみた所、半角、全角問わず文字数を取得し、入力可能文字数を制限することができました。
まとめ
mb_strlen関数は文字列の長さを取得し、文字数を返す。
strlen関数は文字列の長さを取得し、バイト数を返す。
使用例
<?php //空白なし $str = 'ジョン'; echo mb_strlen($str); //3が返ってくる $str = 'ジョン'; echo strlen($str); //9が返ってくる ?>
<?php //空白あり $str = ' ジョン '; echo mb_strlen($str); //5が返ってくる $str = ' ジョン '; echo strlen($str); //11が返ってくる ?>
<?php //半角文字のみ $str = 'John Smith'; echo mb_strlen($str); //10が返ってくる $str = 'John Smith'; echo strlen($str); //10が返ってくる ?>
<?php //全角文字のみ $str = 'ジョン スミス'; echo mb_strlen($str); //7が返ってくる $str = 'ジョン スミス'; echo strlen($str); //19が返ってくる ?>
<?php //半角文字、全角文字混合 $str = 'John スミス'; echo mb_strlen($str); //8が返ってくる $str = 'John スミス'; echo strlen($str); //14が返ってくる ?>
参考サイト
php.net: strlen
php.net: mb_strlen
PHPBook: 文字列の長さを取得(strlen, mb_strlen)
昨年大学を卒業したばかりのエンジニアです。CakePHPを勉強中です。拙い部分も多いですがよろしくお願いします。