codeIgniterのutf-8,SJIS文字化け修正備忘録 | ぽにょ、ぽにょぽーにょ

ぽにょ、ぽにょぽーにょ

2012年からWebエンジニア。
プログラムとか、趣味とか、人生とかの備忘録。

なんかアメブロってださくて使いづらいからそのうち引っ越しまふ。

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