フォームでPOSTされた入力値(全角文字)が消える?
cakephp:1.2.3.8166
DBとソースの文字コードはUTF-8で、画面だけSJISに変換している場合のお話。携帯アプリでよくある話。
で、僕がハマッたのはこういう問題。
<?php //Controller function hoge() { pr($this->data); $this->set("hoge",$this->data); } //View <?php echo pr($hoge)?>
ってやると、pr($this->data)にしっかりと入っている全角文字がViewで吐き出す時になくなっているという問題が起きてしまいました。
もちろん画面の文字コード(Content-Type)がUTF-8の時は問題ない。こんな事態にはならない。
どう考えても文字コードなのですが、どこをどうしたらいいのだろうとあっちこっち彷徨ってしまいました。
「入力値(SJIS)」→「Cake内部処理(UTF-8)」→「Viewレンダリング(UTF-8→SJIS)」という流れになっていたことが見えたので、入力値をSJISからUTF-8に戻せばよかった。
で、結局、入力値を丸ごとUTF-8に戻したらいいねんってことで、
<?php mb_convert_variables("UTF-8","SJIS-Win",$this->data);
これで解決。