前回の続きになるのですが、
そうだ、フォームを作るのであればエスケープをしなければ、ということに気づきました。(遅いorz)
モバイルサイトをsymfonyを使って作っていたので、
symfonyでのエスケープ方法を調べました。
すると出てきたのが、settings.ymlでのエスケープ方法。
all:
.settings:
escaping_strategy: both
escaping_method: ESC_ENTITIES
これをするとすべて文字化けしました(苦笑)
原因を調べてみると、キャリアごとに文字コードを分けていて、
それを最終的に出力してる部分が悪さをしているようでした。
※キャリアごとの文字コードは「Ezweb(au)でモバイルサイトのフォームを送信する際に文字化けする件」参照
その出力部分は以下のような形です。(抜粋)
if ( $objAgent->isVodafone() ) {
echo($content);exit;
}elseif ( $objAgent->isDoCoMo() || $objAgent->isEZweb() ) {
//docomo au はSJIS
$content = mb_convert_encoding( $content, “SJIS-win”, “utf-8” );
$response->setContent( $content );
}else{
echo($content);exit;
}
$contentは
$response = $this->getContext()->getResponse();
$content = $response->getContent();
でhtmlソース全体をとってきていて、
それを強引にすべてS-JISに変換しています。
ちなみにUTF-8の時は
echo($content);exit;
としないとなぜか文字化けorz
とりあえず時間がなくてこういう形をとっています。
結局、フォームの受け取り部分に直接htmlspecialcharsをはめ込みました。
一応これでエスケープはある程度できました。
全体的につくりが悪いです(汗
コメント