PHP関数のmb_substrで取得した文字列が文字化けしている場合、文字コードが正しく設定されていないことが原因かもしれません。たとえば、次の例では、「プログラミング」という文字だけを取得しようとしています。
<?php $temp = "PHPプログラミングの教科書"; echo mb_substr($temp, 3, 7); ?>
文字コードが正しく設定されていないと実行結果は文字化けします。
実行結果(文字化けしている)
文字化けの回避方法
文字化けを解消するために文字コードを設定する方法はいくつかあります。php.iniで設定できれば理想的ですが、とりあえず現在のPHPスクリプトの文字化けを回避するには、次のようにmb_internal_encoding関数を使って指定する方法があります。
<?php mb_internal_encoding("UTF-8"); $temp = "PHPプログラミングの教科書"; echo mb_substr($temp, 3, 7); ?>
これで、文字化けは直るはずです。
実行結果
プログラミング
文字コードの設定場所
上記のように個別のPHPスクリプトで文字コードを設定するのは実用的ではありません。次のような方法で設定しておきましょう。レンタルサーバーによって可能な作業が異なるので、いくつかのパターンを知っておいた方が良いです。
- php.iniの「mbstring.internal_encoding」を編集する
- .htaccessに設定を追加する
- レンタルサーバーの「PHP設定」メニューを使う
必ずしもphp.iniを編集できるとは限らないので、以下、.htaccessに設定を追加する例を紹介します。
php_value mbstring.internal_encoding UTF-8
このコードを.htaccessに記述して、動作中のアプリケーションのルートフォルダに置けば、下の階層にあるPHPスクリプトにも反映されます。