Kenji Suzuki
kenji****@gmail*****
2011年 5月 14日 (土) 07:08:08 JST
Kenji です。 On Sat, 14 May 2011 03:10:56 +0900 オーシャンダニエル <ocean****@gmail*****> wrote: > 皆様 > > 様々なアドバイス頂き有り難うございました。 > UTF-8にするなど様々試してみたのですが、結局うまくいきませんでした。 > CIのファイルinput→CIのファイルoutputだとPOSTの値が化けるが、CIのファイルinput→素のPHPファイルoutputだと化けないというところがなかなかに理解し難いところです。 最初のコードで言えば、これは CI が入力値をサニタイズしていることが原因です。 $config['charset'] = 'UTF-8'; の場合、core クラスの Utf8 クラスが追加の処理をします。 clean_string() メソッドで以下の処理が走ります。 function clean_string($str) { if ($this->_is_ascii($str) === FALSE) { $str = @iconv('UTF-8', 'UTF-8//IGNORE', $str); } return $str; } > 引き続き頑張ってみます。 ベストプラクティスとしては、 $config['charset'] = 'UTF-8'; で、ソースコードは UTF-8。HTML 出力時に Shift_JIS に変換。そして、 入力時に Shift_JIS のデータを UTF-8 に変換する必要があります。 注意が必要なのは、CI がサニタイズする前に入力データの文字コード変換 をする必要があるということでしょうか。 // Kenji > 取り急ぎ、お礼まで。 > > Ocean > > 2011年5月13日20:48 Kenji Suzuki <kenji****@gmail*****>: > > Kenji です。 > > > > > > On Fri, 13 May 2011 13:44:13 +0900 > > Oono Tomoyuki <tomoy****@tabim*****> wrote: > > > >> SJISで結果が出力されれば良いと言うことであれば、 > >> controllerはUTF-8で書いて、最後にmb_convert_encodingでSJISに変換して出力してみてはいかがでしょうか? > >> > >> function _output_sjis ($html = "") { > >> $output = mb_convert_encoding($output, 'SJIS', 'UTF-8'); > >> header('Content-Type: text/html; charset=shift-jis;'); > > > > header('Content-Type: text/html; charset=Shift_JIS'); > > > > ですね(大文字小文字は区別なしですが、ハイフンとアンダースコアは違います)。 > > > > > >> echo $output; > >> } > >> > >> みたいな感じでsjis出力用のメソッドを用意して、そちらで変換して出力というのはいかがでしょうか? > > > > > > // Kenji > > > > _______________________________________________ > > Codeigniter-users mailing list > > Codei****@lists***** > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users