Safariの古いバージョンだとAjaxでUTF-8が無視される

Safariのバージョン3台で、Ajaxでの通信のやりとりを行おうとしても、大抵は文字コードがぶっちぎられる。

せっかく全てのポイントをUTF-8でやりとりしていても、全て文字化け。


これを解決させるためには、面倒だが出力側プログラム(PHP)でエンコードして、

JavaScript側でデコードするしかない。


例)


PHP側


Ajaxにデータを渡してreq.responseTextなどで受け取らせる場合


$value = rawurlencode($value);


この$valueをAjaxの結果として返す。


JavaScript側


(prototype.jsを使った場合)

new Ajax.Request(

'ajax.php',

{

method: 'get',

onSuccess: request_ok,

onFailure: request_ng,

parameters: params

});


function request_ok(req)

{

var content = decodeURIComponent( req.responseText );

document.getElementById('dropLinks').innerHTML = content;

}


function request_ng(req){}


これでJavaScriptからの出力が文字化けせずに取り出す事が出来る。


なおこの仕組みは他のブラウザでも動くので、Safari専用に考える事は無いと思われる。





コメントをどうぞ