モバイルサイトのフォームを送信する際にsymfonyでエスケープする時の文字化け

前回の続きになるのですが、
そうだ、フォームを作るのであればエスケープをしなければ、ということに気づきました。(遅い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をはめ込みました。

一応これでエスケープはある程度できました。

 
全体的につくりが悪いです(汗

コメント

タイトルとURLをコピーしました