2012-02-24 11 views
2

URLをGET変数に渡しています。次のページで変数をエコーすると、特殊文字のないURLが表示されます。例えば、URLを取る:PHP - URL GET変数の問題

http://example.com/upload?url=http://www.test.com/this%20is%20the%20image.jpg

このコードを実行すると:

echo $_GET['url'];

を結果は次のとおりです。私は正確に何を得るにはどうすればよい

http://www.test.com/this is the image.jpg

GET変数の値はURLにあり、rで変換されませんエトワール?

答えて

3

生の値をクエリ文字列に使用する場合は、自分で$_SERVER['QUERY_STRING']を解析する必要があります。

+0

ありがとうございます、それは素晴らしいです! – Lukas

1

はこれを行います。

echo rawurlencode($_GET['url']); 
+1

そして、あなたのコードは次のパスのために出力されます: 'http://example.com/upload?url = http://test.com/somepath?somevar = someval&somevar2 = someval2'? – penartur

+0

右このために 'urlencode'を行うことはできません。私の解決策はここで間違っています。 – skyronic

+0

リクエスト文字列にurlencode以外の値を渡すという全体的なアプローチと同様に間違っています。 – penartur

0

はあなたのhttp://www.test.com/this%20is%20the%20image.jpg?with=some&additional=parametersのようなURLでより多くの柔軟性が追加されますされ、代わりにupload?url=...パスを構築する際に、URLをURLエンコード考えてみましょう。

したがって、あなたの例では、URLはhttp://example.com/upload?url=http%3A%2F%2Fwww.test.com%2Fthis%2020is%2020the%2020image.jpgになります。

変数をurlencodeする方法は、http://php.net/urlencodeを参照してください。

例:リンクと

ページ

function showLink($url) { 
    return "/upload?url=".urlencode($url); 
} 

"アップロード" ページ

echo $_GET['url'] 

こうすることで、あなたはまだリンクから結果を処理できるようになりますshowLink("http://test.com/somepath?somevar=someval&somevar2=someval2")。そうでないと、showLinkでエスケープしないと、http://example.com/upload?url=http://test.com/somepath?somevar=someval&somevar2=someval2のようなURLになり、somevar2がexample.comまたはtest.com(btw、$_GET['url'])へのリクエストの一部であるかどうかを判断するのがかなり難しくなりますそのような場合にはhttp://test.com/somepath?somevar=somevalが含まれます)。

+0

これはAPI用ですので、単純に貼り付けるだけで簡単にリンクを貼りたいと思っています。 – Lukas

+0

私の答えは、物事をより簡単に保つことです。 '$ _GET'変数には、リクエスト文字列から解析する必要なく、正確にあなたが望むURLが含まれます。ところで、まずリクエスト文字列を手動で作成するのではなく(代わりに配列からコンパイルしてください)、残念なことにPHPはこれを行うための組み込みツールを提供していません。 – penartur

+0

そして、私の答えは、あなたが '

penartur