電子書籍の厳選無料作品が豊富!

こんにちは教えてください。
AJAXからPHPを呼んで、PHPから全角文字を受け取ると文字化けしてしまいます。いずれも文字コードはSJISです。例えば下のような感じです。(AsyncRequest()はXMLHttpRequestのオブジェクトを作って返す関数です)

文字化けの原因は何でしょうか?

/*************************************
JavaScript側
*************************************/
var Async = AsyncRequest();
Async.open( "GET" , "test.php );
Async.send( null );
Async.onreadystatechange = function(){
if( Async.readyState == 4 && Async.status == 200 ){
alert( Async.responseText );
}
}

/*************************************
test.php側
*************************************/
<?PJP
Print( "こんにちは" ) ;
?>

A 回答 (4件)

私は既存のシステムがEUCでつくられておりUTF-8にするのがめんどくさくてここにきました。



かなり時間経ってますが、
いまだにここに辿り着く私のようなものもいるので解決方法を記します。

今回の質問の場合ですとphp側で
<?php
Print(mb_convert_encoding("こんにちは",'UTF-8','SJIS')) ;
?>
という具合にSJISをUTF-8に変換して戻せばキチンと表示されました。

また、逆に、phpに対して全角文字を渡す場合には、
参考URLにあるように、ecl.jsという便利なjsファイルがあるので
EscapeSJISなどをつかうと"(株)"などの特殊な文字でもphpへうまく渡せました。

ajax、php間の全角文字のやり取りでは、そのほかに
javascript:encodeURI
php:urldecode
などがキーワードになるかと思います。

参考URL:http://felix-labo.jp/pukiwiki/?JavaScript%2F%E5% …
    • good
    • 0

私は、以下のサイトを参考にして、AJAXとperlの通信プログラムをつくりました。


結論は、JavaScriptがutf8しか解釈しないので、それに合わせる以外にないようです。
JavaScriptを記述しているhtmlもurf8で保存し直す必要があります。
http://allabout.co.jp/career/javascript/closeup/ …

参考URL:http://allabout.co.jp/career/javascript/closeup/ …
    • good
    • 0

過去私も#1さん同様UTF-8を採用しました。


Linux系のディストリビューションのOSで
PHPを動かしていたので何もかも文字コードはUTF-8
でってな感じでやってました。
ほんとに考えることが1つ減ります。
そのときにだったかな?使ってたコードが見つかりましたので
出力部分を示します。
$message = "日の丸弁当梅干抜きで";
$data = rawurlencode($message);
//出力charsetをutf-8に
mb_http_output('UTF-8');
//出力
echo($data);
    • good
    • 0

私がprototype でAJAXを使ったときは、文字コードはすべてUTF-8にしましたね。


XML では、EUCもSJISも使わないほうが経験的に無難だったからなんですけど。

私なら、他のコンテンツも含めてUTF-8にします。
考えることが減りますから。

test.php側で返す文字をUTF-8に変換すれば良いだけかもしれません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!