テキストファイルを読み込む際によくお世話になるmb_convert_encoding関数。文字列をUTF-8に変換する場合は、
mb_convert_encoding( $string , 'UTF-8' , 'auto' );
といった感じで、第3パラメータには’auto’を指定することが多いと思います。マニュアルなどによると、’auto’を指定した場合は、’ASCII, JIS, UTF-8, EUC-JP, SJIS’に展開されるように記載されており、’auto’はとても便利なわけですが、今日はその’auto’で、ちょっとはまってしまいました。
それはアクセスログの検索キーワードを抜き出して表示した際、一部のキーワードが文字化けしていることに気付きました。しかも日本語が全部文字化けということではなく、ごく一部だけです。文字化けしているアクセスログ部分を見てみると、どうやらShift_JISのキーワードが文字化けしています。そこで、試しにmb_detect_order関数を使って文字エンコーディングリストを表示させてみると、
ASCII, UTF-8
のように表示され、肝心の’SJIS’がありません。
php.iniのmbstring.detect_orderの記述を確認すると、その箇所は見事にコメントのままでした。orz
動いているapacheを再起動するのもアレなんで、プログラムを次のように修正。
mb_convert_encoding( $string , 'UTF-8' , 'ASCII, JIS, UTF-8, EUC-JP, SJIS' );
これでとりあえず問題は解決。
php.iniの修正分の反映は、次回のapache再起動でいいかな。。。
投稿日:2009年11月29日
- ※コメントは、スパム対策などのためIPアドレスにて制限しております。
- ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。