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