Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

フォームで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-8SJIS)」という流れになっていたことが見えたので、入力値をSJISからUTF-8に戻せばよかった。

で、結局、入力値を丸ごとUTF-8に戻したらいいねんってことで、

<?php
mb_convert_variables("UTF-8","SJIS-Win",$this->data);

これで解決。