PHPからJavaScriptへGETで値を渡す方法と文字化けの解消方法

このQ&Aのポイント
  • PHPからJavaScriptへGETで値を渡す際にマルチバイト文字が文字化けする問題について、解消方法を教えてください。
  • JavaScriptのjQueryを使用して、PHPから値を渡す際にマルチバイト文字が文字化けする問題が発生しています。解消方法を教えてください。
  • マルチバイト文字の取り扱いで問題が発生しています。PHPからJavaScriptへGETで値を渡す際に文字化けが発生するので、解消方法を教えてください。
回答を見る
  • ベストアンサー

PHPからjavascriptへGETで値を渡すとき

初歩的な質問で失礼いたします。 PHPからjavascriptへGETで値を渡すときにマルチバイト文字が文字化けしてしまいます。 javascriptのjQueryというライブラリを利用しています。 具体的には、 -------------- test.js -------------- var url = 'test.php?code=' + code; $.get(url, function(data){ alert(data); } -------------------------------------- --------------- test.php ------------- $input = $_GET['code'];  ・・・mysqlの処理・・・ echo $output; --------------------------------------- という処理をしています。 test.js → test.phpへ渡す値はマルチバイトではないので問題ないのですが、 test.php → test.jsへ返す値はマルチバイトで文字化けしてしまいます。 php側でrawurlencode関数でエンコードしてから、javascript側でdecodeURI関数を使用してデコードしたのですが、うまくデコードできませんでした。 恐らくデコードの仕方が悪いんだと思うんですが。。。 分かりにくい説明で恐縮ではございますが、ご回答をお願いいたします。 宜しくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

javascriptでは、utf8しか受け付けなかったと思います。 phpで送信文字を、utf8に変換後さらに、urlencodeしてから送信し、 javascript側では、受け取った文字列を、decodeURIComponent で戻します。

tonpei3631
質問者

お礼

ご回答ありがとうございます。 ご指摘の通りで無事に解決することが出来ました。 助かりました。ありがとう御座います。

関連するQ&A

  • JSでURIエンコードしてPHPでデコードしたい

    foo.htmlから読み出されたbar.js内で、リファラーをURIエンコードし、baz.phpでデコードするようにしました。 コードは以下です。 ■foo.html <script type="text/javascript" src="bar.js"></script> ■bar.js //PHPのrawurlencode互換のURIエンコード関数(らしいです) function rawurlencode(str) { return encodeURIComponent(str) .replace(/!/g, "%21") .replace(/'/g, "%27") .replace(/\(/g, "%28") .replace(/\)/g, "%29") .replace(/\*/g, "%2A") .replace(/~/g, "%7E"); }; ref = rawurlencode(document.referrer); document.write('<img src="/bar.php?ref=' +ref); ■baz.php rawurldecode($_GET["ref"]); これでfoo.htmlがUTF8であった場合は正常にリファラが取得できました。(日本語も含め) しかし、foo.htmlがShift-JISであった場合、リファラ内の日本語部分が文字化けしてしまいます。 色々と試行錯誤してはみたのですが、どうしても解消されません。 どなたかお力をお貸しください。 よろしくお願いいたします。

  • Ajax・jQueryでGET時にIEで文字化け

    Ajax・jQueryで日本語をGETするとき、IEで文字化けします。 (Firefox,chromeでは文字化けは起こりません。IE6/7/8で確認すると文字化けします) どのようにしたら文字化けが起こらなくなるか教えていただければと思います。 環境 PHP:5.1.6 サーバー・HTMLの文字コードはUTF-8 下記のようなリンクを作り、「jquery.url.js」でパラメータを取得しています。 <a href="./test.php?keyword=テスト&cate=1"> (実際には下記のソースに示しますが、テストの文字はurlencordしています。) 【javascript部分】 <script type="text/javascript" src="jquery.url.js"></script> <script type="text/javascript"> $().ready ( function() { $('#sample-get').find('a').click ( function() { var url = $.url ( $(this).attr('href') ); $.ajax ({ type: 'GET', url: 'send.php', cache: false, data: url.attr ( 'query' ), success: function ( data, dataType ) { $('#test').html ( data ); }, error: function ( XMLHttpRequest, textStatus, errorThrown ) { this; alert('Error : ' + errorThrown); } }); return false; }); 【HTML(PHP)部分】 $keyword='テスト'; $keyword=urlencord($keyword);//urlエンコード echo<<<EOF <div id="sample-get"> <a href="./test.php?keyword=$keyword&cate=1"><img src="images/sample1.png" alt="sample1" height="200" width="200"></a> </div> EOF; 【PHP部分(send.php)】 <?php echo $_GET['keyword']; echo urldecord($_GET['keyword']); echo $_GET['cate']; ?>

    • ベストアンサー
    • AJAX
  • XMLHttpRequestを利用してPHPへ値を渡したい

    お手数とは思いますが、御導きの程、宜しくお願いします。 ◆プログラムソース 削除対象になるとは思いますが文字数制限により、 別途アップローダーをお借りして、其処にアップロード致しました。 誠に申し訳なく思います。 サイト:小さなアップローダー 様 URL:http://smallup.dip.jp/uploader/ NAME:smallup0515.zip コメント:パソコン何でも質問箱回答者様向け ファイル名:パソコン何でも質問箱.zip downloadパス:okokok 内容: test.html(フォームに値を入力する) test.php(XMLHttpRequestから値を受け取り書き込む) test.js(XMLHttpRequestを利用しPHPへ値を渡す) task.csv(書き込まれた値を保存する) xmlhttp.js(http通信用共通関数) 以上です。ウィルスチェック済みです。 ◆どうしたいか タイトル通りXMLHttpRequestを利用しPHPへ値を送信させたいと思っております。 サイト等を参考に1週間程模索してみたのですが、力量不足でなかなか思い通りになりません。 PHPのプログラムでは値さえ取得できれば、処理を行うことができたので var_dump($_POST)でPOSTされているかを調べたところ空の状態でした。 そこで、値を送信するAjax(JavaScript)側が問題ではないかと思い調べたところ、 open()関数の後にsetRequestHeader()関数を利用しないと ブラウザにより値が送信されないことが分かりました。 しかし、どうもうまく動かず、相変わらずvar_dump($_POST)には空の状態です。 test.jsからtest.phpへ値を渡すにはどのように変更する必要があるのでしょうか? お手数とは思いますが、ご教授ください。

  • PHPとjavascriptで共通なエンコード方法

    PHPからjavascriptにバイナリデータ(16バイト程度)を受け渡す 処理を作成しているのですが、うまく動作しないので、相談します。 バイナリデータをエンコードしてPHPからjavascriptに 以下の流れで引き渡しています。 (1)PHPのbase64_encodeでバイナリデータをエンコード (2)エンコードしたデータをjavascriptに出力 (3)javascriptでデータをデコード (3)のデコードには次のページのbase64.jsなど、いくつかの デコード方法を試してみました。 http://www.onicos.com/staff/iz/amuse/javascript/expert/ しかしながら(1)の元のデータと(3)でデコードしたデータが 一致しません。 質問したいのは以下の2点です。 ・PHPのbase64_encodeとjavascriptのbase64エンコードは  一般的に方式が違うのでしょうか。同じbase64なので  同じコードが生成されると考えたのですが、そうでは  ないのでしょうか。 ・base64_encodeでも、その他の方法でもかまわないので  PHPとjavascriptで共通なエンコード方式、あるいは  PHP上のバイナリデータをjavascriptに正しく受け渡す  方法があれば教えて下さい。 よろしくお願いします。

  • getで日本語を受け取りたい

    リンクからgetで日本語を送信して、javascriptで受け取る方法はありますか? 文字化けするのでdecodeURIComponentでデコードしようとしましたがうまくいきません 送信するリンクのurlはこんな感じです http://hoge.net?id=1&name=なまえ 受け取る側のHTMLには、javascriptで var NAME=decodeURIComponent(NAME); としています

  • phpから値をとってきて変数に格納するには?

    phpから値をとってきて変数に格納するにはどうすればいいのでしょう? ちなみにjavascriptはほとんどさわったことのない初心者です。 やりたいことを具体的に説明します。 p.php 「 <?php yy = "test string"; //?(1) ?> 」 js.html 「 <script language="javascript"> var xx; //?(2) </script> 」 最終的に、php内の変数「yy」の内容をjavascriptの変数「xx」にいれたいのです。 よろしくお願いします。

  • php4.0.6に対応するphp_mbstring.dll

    Apache1.3.35+PHP4.0.6でPHPのローカルテストをする環境を作ろうとしています。 ただ、PHP4.0.6にはマルチバイト文字関数を扱うphp_mbstring.dllが実装されていなく、マルチバイト文字関数を使えません。 後付で同dllを関連付けたいと思っているのですが、どうも他バージョンのdllは使えないらしいのです。 PHP4.0.6に対応するphp_mbstring.dllがどこにあるかご存知の方はいらっしゃいますでしょうか? また、関連付ける方法などご存知の方がいらっしゃいましたら、あわせて教えていただきますようよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • javascript と php とでのデータの受け渡し

    既出の質問かもしれませんが、どの回答を読んでもいまいち理解できなかったので質問させて下さい。 phpからjavascriptへ、その処理結果をphpに送りたいと考えております。 まず phpの変数のデータをjavascriptでクライアント側で処理させるために、 print(<script type='text/javascript'>);~などなど、 printを使ってphpの変数を入れ込んだスクリプトを出力しています。 そして、出力したjavascriptの中にクライアント側の処理後のデータ をphpに送るために、 XmlHttpRequestのopenメソッドで("GET",url,true)とし、 urlには"***.php" + "?a=" + aの値 をいれて request.send(null);で送信するようにしています。 最後に、送信先のphpで $a = $_GET["a"];として受け取ろうとしています。 ちなみに、これらは全て同一ファイル上に書いてあり、 XmlHttpRequestのopenメソッドのurlには、 そのファイル自身を記述してあります。 ブラウザでアクセスしてソースを見てみると、 javascriptは記載されていますが、処理がされていないようで、よって 最後にGETでデータも取得がされていないようです。 そもそもこういったことは可能なのでしょうか? 自分の考え方は間違っているのでしょうか? javascriptもphpも初心者なもので、考え方があっているのかいないのかも 判断できない状況です。また、このjavascriptが何をきっかけに実行されるようにすればいいのかもよくわかりません。 それでは、宜しくお願い致します。

  • AJAXとPHPの全角文字の受け渡し

    こんにちは教えてください。 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( "こんにちは" ) ; ?>

    • 締切済み
    • PHP
  • onblurイベント時にPHPファイルを読み込む

    <check.js>--------------------- function check(obj){ document.write('<script type="text/javascript" src="check.php?code=' + obj.value + '"></script>'); } ------------------------------- check.jsを読み込んだページ内のテキストボックスの onblurイベント時にPHPファイルを読み込みたいのですが、 check.jsを上記のように書くとページがcheck.phpの内容で再描画されてしまいます(当たり前ですね) check.phpにはGETにてパラメータを渡し、DBへ接続して値を抽出する処理だけさせて 元のjsファイルに値を戻したいのですがどのように記述すればいいでしょうか。

専門家に質問してみよう