[Codeigniter-users] CodeIgniterでのPOST値の日本語受け取りの文字化けについて。

Back to archive index

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




Codeigniter-users メーリングリストの案内
Back to archive index