WEBアプリケーション研究室 開発ノート TOP

WEBアプリケーション研究室 開発ノート [symfony] モバイルでフォームが文字化け

スポンサーサイト

-------- --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

    このエントリーをはてなブックマークに追加

モバイルでフォームに日本語の値を戻すときに文字化けが発生しました。
モバイルの文字コード変換は自家製のフィルタでやっていました。resuestのParameterHolderの中身にをUTF-8に変換し、処理後、すべてのrespose contentsをShift_JISに変換していました。一部抜粋するとこんな感じです。


public function execute($filterChain)
{
$response = $this->getContext()->getResponse();

if ($this->isFirstCall())
{
$agent = GmAgentMobile::getInstance();
if($agent->isDoCoMo())
{
$response->setContentType('application/xhtml+xml; charset=Shift_JIS');
}
else
{
$response->setContentType('text/html; charset=Shift_JIS');
}

$ph = $this->getContext()->getRequest()->getParameterHolder();
foreach($ph->getAll() as $key=>$value)
{
$ph->set($key, $this->convertEncoding($value, 'UTF-8', 'SJIS'));
}
}

$filterChain->execute();

$contents = $response->getContent();

$response->setContent(mb_convert_encoding($contents, 'SJIS', 'UTF-8'));

}
で問題はフォームに値をbindするときに

$this->form = new JobSearchMobileForm();
$this->form->bind($request->getGetParameters());
としていたのですが、getGetParametersはrequestのParameterHolderからではなく$_GETの値を別に保持していてそれを返していたのです。つまりShift_JISの値がそのまま入っていました。で、フィルターでもう一度Shift_JISに変換していたので文字化けしていたのです。
フォームにbindするところを

$this->form = new JobSearchMobileForm();
$this->form->bind($request->getParameterHolder()->getAll());
に直したら文字化けしなくなりました。ParameterHolderにGETかPOSTかの区分けが無いのだからgetGetParametersとgetPostParametersは別のところから取ってきてるのは考えればわかるのですが、なかなか頭がそっちに向かず結構はまってしまいました。

モバイルはsymfonyを使わずに作り直しかけてました。OTZ
あー、テンプレも他チームにやってもらっちゃったんだよな・・・月曜にsymofnyに戻す話をしなきゃ・・・
スポンサーサイト

    このエントリーをはてなブックマークに追加
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。