codeIgniterのutf-8,SJIS文字化け修正備忘録 結局自分のぽかミスでしたが、codeigniterとかviでの文字コード修正など、色々勉強になったのでメモ。 [結論] ブラウザのエンコードの自動識別を自動にすればok [事象]iframeを使っているサイトで新規にcodeigniterをいれてページをつくった。 そしたらつくったやつが文字化け。 ここはサイトとかDBがSJISでつくられていたり、utf-8とまじっていてめちゃくちゃ [背景]codeIgniterはデフォルトutf-8だからSJISに直そうとしたが、、、、、 ①viewファイル、下記だけSJISにしてもだめでした。。 <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> ファイルをSJISで保存しなおしましょう。 viでいうと、 :set fenc=sjis-win ②controllerをSJIS変換すると、view側でhtmlspecialcharacterとか使ったらエラーでます。 multi byte変換できませんみたいな。。 (参考) viでSJISファイルを開いて、文字化けするとき、、、、 http://deginzabi163.wordpress.com/2009/02/18/%E8%A6%9A%E6%9B%B8vim%E3%81%A7sjis%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E9%96%8B%E3%81%84%E3%81%9F%E3%82%89%E3%80%81%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91%E3%81%97%E3%81%9F%E3%82%89/ 開いた時に :e ++enc=cp932[Enter] をやりましょう (参考ページ) 入力データのサニタイズの影響で、Webアプリケーションを「UTF-8」で開発し、 HTML側が「ShiftJIS」のような場合、POSTデータが文字化けしてしまいます。 できれば、HTML側も「UTF-8」で運用することが良いのですが、何らかの理由でHTML側の文字コードが「UTF-8」以外の場合、 フック機能の「pre_system」フックポジションで、POSTデータを「UTF-8」に変換する処理が必要になってきます。 http://www.ci-guide.info/practical/core/utf8/ ベストプラクティスとしては、 $config['charset'] = 'UTF-8'; で、ソースコードは UTF-8。HTML 出力時に Shift_JIS に変換。 そして、入力時に Shift_JIS のデータを UTF-8 に変換する必要があります。 http://program.sagasite.info/wiki/index.php?CodeIgniter%20%E6%96%87%E5%AD%97%E3%82%B3%E3%83%BC%E3%83%89%E5%A4%89%E6%8F%9B CodeIgniter の出力を ShiftJIS にする http://dhive.jp/blog/yama/195.html CIのoutputメソッドを探してみる http://blog.paz-para.com/?p=2610 viで覚えたこと // 配列をutf-8からsjis-winに文字コード変換 mb_convert_variables('sjis-win','utf-8',配列) // stringのencode判定 mb_detect_encoding($string) //vi :set fenc=sjis-win