urlencode
URLに渡す前に変数を処理しました
http://example.com/Restaurants?alias=F%26B
しかし、私がページのように印刷しようとすると
$alias = rawurldecode($_GET['alias']);
echo $alias;
のみ印刷しF
ます。これを解決する方法は?
urlencode
URLに渡す前に変数を処理しました
http://example.com/Restaurants?alias=F%26B
しかし、私がページのように印刷しようとすると
$alias = rawurldecode($_GET['alias']);
echo $alias;
のみ印刷しF
ます。これを解決する方法は?
$_GET['alias']
クエリでURLをリクエストするときにそれが存在するのではないかと思いますaliasF%26B
。それはむしろ$_GET['aliasF&B']
それが移入されているということです。
この場合$_SERVER['QUERY_STRING']
、完全なクエリを取得するためにを使用する必要があります。
クエリ文字列を「正しく」使用していないようです。key=value
ペアにする必要があります。$_SERVER['QUERY_STRING']
代わりに、あなたの情報を取得するために使用することを検討します。
ペアをurlencodeする必要はありません。名前と値をそのようにurlencodeする必要があるだけです:
間違い:
urlencode('aliasF=B')
正しい:
urlencode('aliasF') . '=' . urlencode('B')
AFAIK$_GET
はすでにデコードされています。
php.netを参照してください
スーパーグローバル$_GETと$_REQUESTはすでにデコードされています。$_GETまたは$_REQUESTの要素でurldecode()を使用すると、予期しない危険な結果が生じる可能性があります。
状況に固有の別のエンコーディングシステムを使用することで、この問題を解決することができます。
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に注意してください。