• 締切済み

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であった場合、リファラ内の日本語部分が文字化けしてしまいます。 色々と試行錯誤してはみたのですが、どうしても解消されません。 どなたかお力をお貸しください。 よろしくお願いいたします。

みんなの回答

回答No.1

PHPで、URLデコードしたものをmb_convert_encoding()などでUTF-8に変換してみて下さい。 http://www.php.net/manual/ja/function.mb-convert-encoding.php

okimuk2050
質問者

お礼

回答ありがとうございます。 bar.jsから文字コードを受け取って、 mb_convert_encoding を使用してUTF-8に変換したところ大体はうまく変換できました。 ただ、全角の「~」という文字が入っているアドレスで文字化けしてしまいます。 こういった特殊な記号(?)的なものが入ると文字化けはしてしまうものなのでしょうか? 何か対処法があればご教授お願いします。

関連するQ&A