【问题标题】:Get Parameters Before The URL获取 URL 前的参数
【发布时间】:2023-03-23 15:59:01
【问题描述】:

我收到这样的字符串:

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"

之前谢谢!

【问题讨论】:

  • 问号可能会给你带来麻烦
  • 那不是一个正确编码的查询字符串。您可以发布var_dump 的不同值($output$raw 等)吗?
  • @jeroen 添加在原帖中!
  • 你将不得不对 url= 部分之后的内容进行 url 编码
  • 还有$output?这很可能是您的问题所在。

标签: php curl parameters get encode


【解决方案1】:

我已经看到使用函数 parse_str() 我无法获得 &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

【讨论】:

  • 谢谢!有用!我的错是在“parse_string()”之前的“parse_url()”。
【解决方案2】:

将问号编码为 %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'];

【讨论】:

  • 我在网址上只看到一个问号。第二个在哪里?
  • 同意这个答案,你只会得到第二个token参数
  • 好的,那我怎样才能得到第一个参数呢?
  • 有2个问号,因为你遗漏了url的第一部分,它类似于'domain.com?result=OK&token=ABCD&url=http://…',这是不允许的,所以你应该编码最后一个问号。
【解决方案3】:

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

$raw = rawurldecode($output);

在这里你正在解码你的字符串,将一个有效的查询字符串转换成一个未解码的字符串。

由于您想将结果解析为查询字符串 - 使用 parse_str() - 您不应先对其进行解码,因为解码后它不再包含 parse_str() 的有效输入。

【讨论】:

    【解决方案4】:

    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

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2021-01-16
      • 2011-04-01
      • 2017-04-09
      • 2011-05-26
      • 2011-06-24
      • 1970-01-01
      • 2022-01-08
      相关资源
      最近更新 更多