我试图开发一个新的银行模块。银行有一个API,当我在向银行的API发出请求时发送以下URL作为参数时:
https://www.example.net:443/demo/index.php?order&bank&success&ho
然后返回一个包含请求结果作为URL参数的响应URL,但是银行的API假定提供的URL还没有查询字符串,而只是追加了一个新的完整查询字符串,包括?
到输入的网址(例如)?TPE=monet14&date=12%2f07%2f2018%5fa%5f11%3a32%3a28&monta
中,得到最终的网址:
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'] = ""
和{ {1}}。当我将远程用户重定向到此URL时,他们然后将重定向到$_GET['TPE'] = "monet14"
而不是所需的脚本。
这是重定向用户后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"
}
在重定向用户之前,如何在银行API返回的URL中将额外的 https://www.example.net:443/demo/index.php?order&bank&success&ho&TPE=monet14
更改为?
?
答案 0 :(得分:1)
如果我说对了,您可能正在寻找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));