[PHP] mb_strposやmb_substrが上手く動作しない場合の対処法

php・MySQL・Web開発

phpでmb_strposやmb_substrが思ったように動作せず、長時間ハマってしまいました。

対策を結論から書くと、文字エンコーディングを明示的に指定すればOK。

関数の第3引数で指定する方法もありますが、それではいちいち面倒くさいし忘れることもある。文字コードはスクリプト全体に影響を及ぼすものですので、以下の方法を推奨します。

mb_language("ja");
mb_internal_encoding("UTF-8");

これを該当スクリプトの先頭か、または必ず(先頭の位置で)requireするファイルの先頭に入れておくだけでOK。UTF-8以外をお使いの方は2行目を適宜書き換えてください。

他にも「mb_」系の関数で何か問題が起きた場合は、まずこの設定を疑ってください。上記の二行を加えることでたいてい解決する可能性が高いと思われます。

コメント

タイトルとURLをコピーしました