- ベストアンサー
エンコードされたものを、$_GETしたら...
よろしくお願いします。グーグルdirectory検索のパラメータ%E3%82%A2%E3%83%BC%E3%83%88を使ったWEBアプリを作ろうと思っています。 $query ='%E3%82%A2%E3%83%BC%E3%83%88/' ; //これは'アート/'ディレクトリに対応している print '<a href="'.$_SERVER['PHP_SELF'].'?query='.$query.'">アート</a>'; のリンクをブラウザで実行して、$_GET['query']して、$queryに代入してprintしたところ、'アート/'と表示されました。 '%E3%82%A2%E3%83%BC%E3%83%88/'を何度も持ち歩きたいと思っているので、'アート/'となってもらっては困るのです。なぜなら、この$query ='アート/'を次に$_GETで受け取ると、 'アーチE'と表示されたからです。 '%E3%82%A2%E3%83%BC%E3%83%88/'のまま <a href="'.$_SERVER['PHP_SELF'].'?query='.$query.'">アート</a>で、 次に渡して、$_GET['query']で受取る方法はないでしょうか? または、'%E3%82%A2%E3%83%BC%E3%83%88'をデコードして'アート'にする関数などありますか? urlencode('アート');は、'%83A%81%5B%83g'という少し短いものになり、これは使うことができないのです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
さらにもう一回urlencodeを掛けるとよいと思います。 $query ='%E3%82%A2%E3%83%BC%E3%83%88/'; print '<a href="'.$_SERVER['PHP_SELF'].'?query='.urlencode($query).'">アート</a>'; もう一回 %文字を %25と置き換えていくので、生成されたurlは、かなり冗長ではあるが、自動urldecodeされた $_GET['query'] は元の$queryと同じになるはず。 urldecode($_GET['query'])またはurldecode($query) で'アート/'になるはずですけど、 3文字程度だと文字コードセットによっては誤変換があり得るので、その場合は、php.iniの mbstring.detect_order = auto を、利用している文字コードセットを先に記述するように変更して下さい。
その他の回答 (2)
- ma2shin
- ベストアンサー率41% (69/167)
ページをEUC-JPで作ってやればすべて解決しそうな気がしますが、SJISで作ると特定の文字でバックスラッシュがでます。
お礼
回答ありがとうございます。 自分はUTF-8でページを作っていますが、
- sakusaker7
- ベストアンサー率62% (800/1280)
>または、'%E3%82%A2%E3%83%BC%E3%83%88'をデコードして'アート'にする関数などありますか? > urlencode('アート');は、'%83A%81%5B%83g' どっちも元は「アート」だというのなら上と下とで文字コードが違ってますよ。 上がUTF-8で下がShiftJIS。 その辺きちんと考慮してやれば urlencode で用を果たせませんか?
お礼
いつもありがとうございますsakusaker7さん。 自分は文字コードに対して弱いので勉強になります。
お礼
複数回urlencode使えたのですか! とりあえず、解決しました。ありがとうございます。 しかし、自分の質問の仕方に自信がなかったので、的確に答えていただいて驚いています。