如何拥有一个好的网址?

时间:2018-08-15 22:21:54

标签: php

我试图开发一个新的银行模块。银行有一个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 更改为?

1 个答案:

答案 0 :(得分:1)

如果我说对了,您可能正在寻找http_build_queryparse_strparse_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));