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:

在调用者脚本中编码你的appdataTWICE

// 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:

在调用者脚本中编码您的appdataONCE,在接收者脚本中编码 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 回答