1

私はURLで次のことをしています

file_get_contents('https://xyz.com/login.php?app_data=%7B%22page%22%3A%22details%22%2C%22id%22%3A%2273%22%2C%22crp%22%3A%221%22%2C%22cip%22%3A%22%22%7D');

しかし、私はもう一方の端でそれを受け取っています

app_data={"page":"details","id":"73","crp":"1","cip":""}

ではなく

app_data=%7B%22page%22%3A%22details%22%2C%22id%22%3A%2273%22%2C%22crp%22%3A%221%22%2C%22cip%22%3A%22%22%7D'

もう一方の端のコード:

if(isset($_GET['url']))
{
    log($_GET['url']);
}

logファイルに書き込んでいるだけです。

回答:いいえ、しかし$_GET そうです。

4

3 に答える 3

1

ソリューション A:

appdata呼び出し元スクリプトで TWICE をエンコードします

// Caller script
$appdata = '"page":"details","id":"73","crp":"1","cip":""';
$appdata = urlencode(urlencode($appdata));

file_get_contents("https://xyz.com/login.php?app_data=$appdata");

ソリューション B:

appdata発信者スクリプトで ONCE をエンコードし、受信者スクリプトで ONCE をエンコードします。

// Caller script
$appdata = '"page":"details","id":"73","crp":"1","cip":""';
$appdata = urlencode($appdata);

file_get_contents("https://xyz.com/login.php?app_data=$appdata");

// Receiver script
$appdata = urlencode($_GET['app_data']);

そして、あなたが得るものはあなたが期待するものです... ;-)

于 2012-04-07T10:39:13.947 に答える
1

のドキュメントに従って$_GET

ノート:

GET 変数はurldecode()を介して渡されます。

これはキーと値の両方に当てはまります (後者が混乱の原因です)。必要な結果を得るには、クライアントで二重エンコードする必要があります (これは非常に醜い回避策です)

$appdata = urlencode(urlencode('{"page":"details","id":"73","crp":"1","cip":""}'));
file_get_contents("https://xyz.com/login.php?app_data=$appdata");

または、適切に実行して、サーバー側で文字列を後処理します。

// $app_data will contain the nice, unescaped form
$app_data = $_GET['app_data']

// later if we need to pass $app_data in another request,
// we explicitly encode it again.
$app_data_encoded = urlencoded($app_data);
于 2012-04-07T10:50:01.623 に答える
0

urlencodeを使用して、エンコードされた形式に戻すことができます。

$result = urlencode($app_data);
echo $result;
于 2012-04-07T10:37:51.390 に答える