いろいろと掲載されてはいましたが、結局うまく行かず、悩んでおりましたが、ようやくできました。
- apps/(appname)/config/view.ymlを以下のようにcontent-typeを変更
default:
http_metas:
content-type: text/html; charset=Shift_JIS
- apps/(appname)/config/filters.ymlを以下のように変更
rendering: ~
web_debug: ~
security: ~
MobileFilter:
class: MobileFilter
cache: ~
common: ~
flash: ~
execution: ~
- 最後に、lib/filters/MobileFilter.phpを作成する。コードはべたべたなので、綺麗に書いてくださいね。
<?php
class MobileFilter extends sfFilter{
public function execute($filterChain = null){
if ($this->isFirstCall()){
//error
$er=error_reporting();
if ($er > E_STRICT){
error_reporting($er - E_STRICT );
}
require_once ('Net/UserAgent/Mobile.php');
$userAgent=Net_UserAgent_Mobile::singleton();
$this->getContext()->getRequest()->setAttribute('userAgent', $userAgent);
//出力文字コードの制御
// sfConfig::set('sf_charset',"shift_jis");
sfConfig::set('sf_charset',"UTF-8");
$this->encodingParams('SJIS-win','UTF-8');
mb_internal_encoding('UTF-8');
//mb_http_output('SJIS-win');
// ob_start('mb_output_handler');
ob_start( array($this,'m_output_handler'));
}
if ($filterChain) $filterChain->execute();
}
function m_output_handler($buffer){
sfConfig::set('sf_charset',"shift_jis");
error_log($buffer,3,"/var/www/morenavi/log/mobile.log");
return mb_convert_encoding($buffer,'SJIS-win','UTF-8');
//return $buffer;
}
protected function encodingParams($from,$to){
if ($to !='' && $from !='' && $from != $to ){
$params=$this->getContext()->getRequest()->getParameterHolder()->getNames();
foreach ($params as $param){
$in=$this->getContext()->getRequest()->getParameter($param);
$this->getContext()->getRequest()->setParameter($param, mb_convert_encoding($in,$to,$from));
}
}
}
}