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

2010年4月30日

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専用に考える事は無いと思われる。