0

urlencodeURLに渡す前に変数を処理しました

http://example.com/Restaurants?alias=F%26B

しかし、私がページのように印刷しようとすると

 $alias =  rawurldecode($_GET['alias']);
 echo $alias;

のみ印刷しFます。これを解決する方法は?

4

5 に答える 5

3

$_GET['alias']クエリでURLをリクエストするときにそれが存在するのではないかと思いますaliasF%26B。それはむしろ$_GET['aliasF&B']それが移入されているということです。

この場合$_SERVER['QUERY_STRING']、完全なクエリを取得するためにを使用する必要があります。

于 2010-03-17T18:41:57.817 に答える
1

クエリ文字列を「正しく」使用していないようです。key=valueペアにする必要があります。$_SERVER['QUERY_STRING']代わりに、あなたの情報を取得するために使用することを検討します。

于 2010-03-17T18:43:08.760 に答える
1

ペアをurlencodeする必要はありません。名前と値をそのようにurlencodeする必要があるだけです:

間違い:

urlencode('aliasF=B')

正しい:

urlencode('aliasF') . '=' . urlencode('B')
于 2010-03-17T18:44:41.117 に答える
1

AFAIK$_GETはすでにデコードされています。

php.netを参照してください

スーパーグローバル$_GETと$_REQUESTはすでにデコードされています。$_GETまたは$_REQUESTの要素でurldecode()を使用すると、予期しない危険な結果が生じる可能性があります。

于 2010-03-17T18:46:10.047 に答える
0

状況に固有の別のエンコーディングシステムを使用することで、この問題を解決することができます。

function encode($string)
{
  $result = str_replace("|","||",$string);
  return str_replace("&","|20",$result);
}

function decode($string)
{
  $result = str_replace("|20","&",$string);
  return str_replace("||","|",$result);
}

これにより、基本的に「|」を使用して別のエスケープシステムが作成されます。キャラクター。その文字は、通常は使用しないものであれば何でもかまいませんし、フィールド区切り文字でもありません。

ここで、ApacheはURLを別のものに変換しないため、変換が無効になります。また、ブラウザはそれを変換しません。

あなたがそうすることdecode($_GET['alias'])encode()、ユーザーが押しているURLまたはスクリプトがフォローしているURLに注意してください。

于 2013-09-18T21:59:51.953 に答える