[PHP][JavaScript] urlencode と encodeURI でのエンコードと文字化け問題

 

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) はてなブックマーク - javascript: escape(), encodeURI(), encodeURIComponent() 比較 (groundwalker.com)

URL(URI)エンコード・デコードを行う – JavaScript TIPSふぁくとりー はてなブックマーク - URL(URI)エンコード・デコードを行う - JavaScript TIPSふぁくとりー

PHP: urlencode – Manual はてなブックマーク - PHP: urlencode - Manual