このエントリーをはてなブックマークに追加 Twitterでツイート 思い込みのデフォルト設定

テキストファイルを読み込む際によくお世話になる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アドレスにて制限しております。
  • ※誹謗や中傷、スパムなど、不適切な内容は公開いたしません。ご了承ください。