我收到一个这样的字符串:
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"
先谢谢!
答案 0 :(得分:2)
我已经看到使用
之前的参数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
答案 1 :(得分:1)
将问号编码为%3F
。
在网址中只允许使用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'];
答案 2 :(得分:0)
如果没有看到$output
的确切值,我猜这就是问题所在:
$raw = rawurldecode($output);
在这里解码你的字符串,将有效的查询字符串转换为未解码的字符串。
由于您要将结果解析为查询字符串 - 使用parse_str()
- 您不应该先解码它,因为解码后它不再包含parse_str()
的有效输入。
答案 3 :(得分:0)
PHP获取为QUERY_STRING,字符串在最后一个问号后,因此您拥有自己的&#39;?&#39;和一个&#39; url&#39;参数,这就是你只接收令牌的原因,以及那个!
首先编码,以避免字符串中的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
。