• ベストアンサー

エンコードされたものを、$_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'という少し短いものになり、これは使うことができないのです。

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

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

さらにもう一回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 を、利用している文字コードセットを先に記述するように変更して下さい。

brosis
質問者

お礼

複数回urlencode使えたのですか! とりあえず、解決しました。ありがとうございます。 しかし、自分の質問の仕方に自信がなかったので、的確に答えていただいて驚いています。

その他の回答 (2)

  • ma2shin
  • ベストアンサー率41% (69/167)
回答No.3

ページをEUC-JPで作ってやればすべて解決しそうな気がしますが、SJISで作ると特定の文字でバックスラッシュがでます。

brosis
質問者

お礼

回答ありがとうございます。 自分はUTF-8でページを作っていますが、

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

>または、'%E3%82%A2%E3%83%BC%E3%83%88'をデコードして'アート'にする関数などありますか? > urlencode('アート');は、'%83A%81%5B%83g' どっちも元は「アート」だというのなら上と下とで文字コードが違ってますよ。 上がUTF-8で下がShiftJIS。 その辺きちんと考慮してやれば urlencode で用を果たせませんか?

brosis
質問者

お礼

いつもありがとうございますsakusaker7さん。 自分は文字コードに対して弱いので勉強になります。

関連するQ&A