我正在尝试开发一个新的银行模块。银行有一个API,当我发送以下URL作为对银行API的请求中的参数时:
https://www.example.net:443/demo/index.php?order&bank&success&ho
然后,它返回一个包含请求结果作为URL参数的响应URL,但是银行的API假定所提供的URL还没有查询字符串,并简单地将包括?
的新的完整查询字符串附加到输入URL (例如) ?TPE=monet14&date=12%2f07%2f2018%5fa%5f11%3a32%3a28&monta
,从而生成最终的URL:
https://www.example.net:443/demo/index.php?order&bank&success&ho?TPE=monet14&date=12%2f07%2f2018%5fa%5f11%3a32%3a28&monta
然而,由于额外的?
字符,当我将用户重定向到这个URL时,我的服务器将$_GET['ho?TPE']
解释为单变量"monet14"
,而不是$_GET['ho'] = ""
和$_GET['TPE'] = "monet14"
。当我将远程用户重定向到此URL时,他们将被重定向到index.php
,而不是所需的脚本。
以下是重定向用户后var_dump($_GET)
的输出:
array(23) {
["order"]=> string(0) ""
["desjardins"]=> string(0) ""
["success"]=> string(0) ""
["ho?TPE"]=> string(7) "monet14"
["date"]=> string(21) "12/07/2018_a_11:32:28"
["montant"]=> string(5) "53EUR"
}
相反,我希望用户被重定向到:
https://www.example.net:443/demo/index.php?order&bank&success&ho&TPE=monet14
在重定向用户之前,如何将我的银行API返回的URL中的额外?
更改为&
?
发布于 2018-08-16 06:57:16
如果我没记错的话,你可能在找http_build_query
、parse_str
和parse_url
。下面是一个如何解析、操作两个查询并将其组合为一个查询的示例:
// These are the two URLs to parse
$url1 = 'https://www.example.net:443/demo/index.php?order&bank&success&ho?TPE=monet14&date=12%2f07%2f2018%5fa%5f11%3a32%3a28&monta...'
$url2 = '?TPE=monet14&date=12%2f07%2f2018%5fa%5f11%3a32%3a28&monta';
// Get the part after the "?"
$queryString1 = parse_url($url1)['query'] ?? ''; // 'query' may be undefined
$queryString2 = parse_url($url2)['query'] ?? ''; // 'query' may be undefined
// Split the parts into usable arrays and save the result into defined variables
$queryArray1 = $queryArray2 = [];
parse_str($queryString1, $queryArray1);
parse_str($queryString2, $queryArray2);
// Now you can manipulate the arrays as you wish;
// after you have done that, you can combine them together:
$resultQueryString = http_build_query(array_merge($queryArray1, $queryArray2));
https://stackoverflow.com/questions/51867240
复制相似问题