プロが教えるわが家の防犯対策術!

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であった場合、リファラ内の日本語部分が文字化けしてしまいます。


色々と試行錯誤してはみたのですが、どうしても解消されません。
どなたかお力をお貸しください。
よろしくお願いいたします。

A 回答 (1件)

PHPで、URLデコードしたものをmb_convert_encoding()などでUTF-8に変換してみて下さい。



http://www.php.net/manual/ja/function.mb-convert …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

bar.jsから文字コードを受け取って、
mb_convert_encoding
を使用してUTF-8に変換したところ大体はうまく変換できました。

ただ、全角の「~」という文字が入っているアドレスで文字化けしてしまいます。
こういった特殊な記号(?)的なものが入ると文字化けはしてしまうものなのでしょうか?

何か対処法があればご教授お願いします。

お礼日時:2011/02/01 16:46

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