PHP
CakePHP
携帯向けサイトを開発する場合や、レンタルサーバーでPHPの文字コードがEUC-JPに設定されてしまっている場合の対処方法です。
- UTF-8でHTMLを表示したいが、PHPがEUC-JPに固定されてしまっている場合。
headerでHTML出力を指定します。
POSTパラメーターの文字コードはheaderと同じですが、GETパラメーターが文字コード変換されてしまっている場合、UTF-8に変換します。
class AppController extends Controller { function beforeFilter() { parent::beforeFilter(); $this->header("Content-type: text/html; charset=utf-8"); if(isset($this->params['url'])) { array_walk_recursive($this->params['url'], '&$val, $key',
‘$val = mb_convert_encoding($val, “UTF-8”, “auto”);’
) );
}
} }
※CakePHP 1.3.8ではRequestHandler::RespondAsは、Content-Disposition以外のheaderを出力しません。
http://api.cakephp.org/view_source/request-handler-component/#line-702
headerの二重送出を防ぐために、このような状態になってしまっているようです。
http://cakephp.lighthouseapp.com/projects/42648/tickets/842
- 出力HTMLの文字コードをEUC-JPに変換する例です。
フォームなどでは、上記例のようにbeforeFiterで$this->data等をUTF-8に変換する必要があります。
class AppController extends Controller {
function afterFilter(){
parent::afterFilter(); $this->output = mb_convert_encoding($this->output, "EUC-JP", "UTF-8"); } }
- array_walk_recursive()の情報ありがとうございます。途中、create_function(‘&$val, $key’,の指定が抜けているようです。 — {2011-08-04 (木) 22:17:53}
- ご指摘、ありがとうございます。 — 管理者 {2011-08-05 (金) 19:04:36}