[PHP][JavaScript] urlencode と encodeURI でのエンコードと文字化け問題
- 2011 10/19
- カテゴリー : PHP
- JavaScript
- コメントを書く
PHP と JavaScript でエンコードするタイミングによりIEで文字化け問題が発生しました。
解決方法としては、PHP側でエンコードしてJavaScript側に渡さないようにして、PHP側からはそのまま値を渡してJavaScript側でエンコードすればOKでした。
■ 文字化け問題が発生するパターン
[PHP]
コントローラで urlencode して、テンプレートに出力する。
1 2 | $url = urlencode('http://example.com/?p=2&keyword=テスト'); $smarty->assign('url', $url); |
↓
[HTML]
1 | <a href="javascript:formsubmitt('http://example.com/?p=2&keyword=%E3%83%86%E3%82%B9%E3%83%88');">次へ</a> |
↓
[JavaScript]
1 2 3 4 | function formsubmitt (action_url) { form.action = action_url; form.submit(); } |
■ IEでも正常に処理できるパターン
[PHP]
コントローラでエンコードせずに、そのままテンプレートに渡す。
1 2 | $url = 'http://example.com/?p=2&keyword=テスト'; $smarty->assign('url', $url); |
↓
[HTML]
1 | <a href="javascript:formsubmitt('http://example.com/?p=2&keyword=テスト');">次へ</a> |
↓
[JavaScript]
1 2 3 4 | function formsubmitt (action_url) { form.action = encodeURI(action_url); form.submit(); } |
以上です。
【参考】
・javascript: escape(), encodeURI(), encodeURIComponent() 比較 (groundwalker.com)
・URL(URI)エンコード・デコードを行う – JavaScript TIPSふぁくとりー