PHPを独学するなら、Udemyの動画講座で
PHP 7も使えて快適な エックスサーバー

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

スポンサーリンク

こちらもどうぞ

こちらも参考にしてください

関連記事

MySQL

phpMyAdmin

PHPサンプルコード

PHP全般

WordPress

エラーメッセージ

PHPの基礎が身に付いたかチェック!

PHP「直す力」養成ドリル
スポンサーリンク