获取 URL 之前的参数

Get Parameters Before The URL

我收到这样的字符串:

result=OK&token=ABCD&url=http://www.example.com/shopping/vas?token=ABCD

我用这段代码来编码 url:

curl_setopt($ch, CURLOPT_URL, "result=OK&token=ABCD&url=http://www.example.com/shopping/vas?token=ABCD"); 

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// $output contains the output string 
$output = curl_exec($ch);
$raw = rawurldecode($output);
$pars = parse_url($raw);
parse_str($pars['query'],$result);

我看到用函数parse_str()无法获取&url=之前的参数。我怎样才能得到 response=OK?我需要它来了解我的网站是否可以继续运营。

正如有人问的,这是

var_dump($raw) -> string(112) "result=OK&token=330852&url=https://www.premiumline.eu/onshop/vas/login_mp?token=330852&acq=225583&track=12yy2333"

先谢谢了!

将问号编码为 %3F 。 url 中只允许有 1 个问号(它是一个分隔符)。

$the_url = urlencode($url);

$str = "result=OK&token=ABCD&url=http://www.example.com/shopping/vas?token=ABCD";

$params =  parse_str(urlencode($str));
$result = $params['result'];

I've seen that with the function parse_str() I can't get the parameters before &url=

不正确


您可以使用parse_str()来解析查询字符串的所有参数,即:

$queryStr = "result=OK&token=ABCD&url=http://www.example.com/shopping/vas?token=ABCD";
parse_str($queryStr);
echo $result;
echo $token;
echo $url;

输出:

OK
ABCD
http://www.example.com/shopping/vas?token=ABCD

DEMO

没有看到 $output 的确切值,我猜这是问题所在:

$raw = rawurldecode($output);

此处您正在解码字符串,将有效的查询字符串转换为未解码的字符串。

因为你想将结果解析为查询字符串 - 使用 parse_str() - 你不应该先解码它,因为解码后它不再包含 parse_str().[=14= 的有效输入]

PHP 变成 QUERY_STRING,最后一个问号 之后的字符串 ,所以你有自己的 '?'和 'url' 参数中的一个,这就是为什么你只收到令牌的原因,还有一个!

首先对其进行编码以避免字符串中出现 url 个字符 result=OK&token=ABCD&url=http://www.example.com/shopping/vas?token=ABCD

示例

$urlParam = "result=OK&token=ABCD&url=http://www.example.com/shopping/vas?token=ABCD";

$urlParamEncoded = urlencode($urlParam);
curl_setopt($ch, CURLOPT_URL, $urlParamEncoded); 

//return the transfer as a string 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

// $output contains the output string 
$output = curl_exec($ch);
$raw = rawurldecode($output);
$pars = parse_url($raw);
parse_str($pars['query'],$result);

然后您可以在目标脚本文件中使用 urldecode