気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. PHP関数
  2. 23 view

mb_strlen関数による文字数のカウントがおかしいとき

mb_strlen関数でカウントした文字数がおかしく感じることがあります。ほとんどの場合、マルチバイト関数で使う文字コードの設定の問題です。php.iniの設定「mbstring.internal_encoding」をチェックしてみましょう。「mb_」で始まるマルチバイト関数の動作がおかしいときは多くの場合、これが原因です。

日本語の処理にはマルチバイト関数を使う

文字数のカウントがうまくいかない原因として、大丈夫だと思いますが念のため書いておきます。文字数のカウントなど、日本語の処理は「mb_」で始まるマルチバイト関数を使う必要があります。「mb_」が付いていないstrlen関数もありますが、次のコードは「3」ではなく「6」や「9」が返されます。結果に違和感があるでしょう。

<?php
// うまくいかない処理
echo strlen("あいう");
?>

言うまでもありませんが、この場合、strlen関数の代わりにmb_strlen関数を使います。次のコードは文字数を示す「3」が表示されます。

<?php
// 文字数「3」が表示される
echo mb_strlen("あいう");
?>

マルチバイト関数には文字コード設定が必要

mb_strlen関数を使って上記のように記述しても「6」や「9」が返される場合は、PHPの設定ファイル(php.ini)を開いて、マルチバイト関数で使う文字コードが正しく設定されているか確認してみましょう。設定項目はmbstring.internal_encodingです。

マルチバイト文字コードの設定(php.ini)

mbstring.internal_encoding = UTF-8

php.iniを変更できない場合などは、マルチバイト関数のパラメータに直接指定する方法もあります。mb_strlen関数では、2番目のパラメータに文字コードを指定することができます。

マルチバイト文字コードの設定(個々のPHP関数で)

mb_strlen(“あいう”, “UTF-8”)

文字コードを個別の関数で設定せずに、mb_internal_encoding関数を使ってスクリプトの先頭などで一括設定することもできます。

マルチバイト関数で使う文字コードを設定する(スクリプトの先頭などで)

mb_internal_encoding(“UTF-8”);

.htaccessに記述する方法もあります。レンタルサーバーなどでphp.iniを修正できない場合には便利です。最も現実的なのはこの方法でしょうか。

マルチバイト文字コードの設定(.htaccessで)

php_value mbstring.internal_encoding UTF-8

PHP関数の最近記事

  1. mb_send_mail関数でReturn-Pathを設定する方法

  2. is_numeric関数とis_int関数の違い

  3. PHPのdate関数の使用例

  4. isset関数とempty関数と「!」の違い

  5. 文字列を分割して配列を作成するexplode関数

関連記事

PAGE TOP