你好,我想覆盖从旧链接到新链接的所有参数..喜欢
$oldURl="https://example.com/abcd/data?p=123&x=ABCDSS";
$newUrl="https://example.com/?data=1&data2=2&data3=3";
// $fnialurl=rewrite_data($oldURl,$newUrl);
我想要的最终结果..
https://example.com/abcd/data?data=1&data2=2&data3=3&p=123&x=ABCDSS
您有任何想法从旧网址获取路径和请求并将其替换为新网址
parse_url
来实现这一点。循环您想要加入的所有 url,组合它们的所有路径和查询,然后在最后再次输出它们 - 它们需要按照您想要加入它们的顺序传递,但是在此示例中需要相同的主机,但它应该让你开始吧。
function rewrite_data(string ...$urls): string
{
$paths = [];
$queries = [];
$key = parse_url(current($urls));
foreach ($urls as $url)
{
$parsedUrl = parse_url($url);
$paths[] = $parsedUrl['path'] ?? null;
$queries[] = $parsedUrl['query'] ?? null;
}
[$paths, $queries] = [array_filter($paths, fn($x) => $x && $x !== '/'), array_filter($queries)];
return sprintf('%s://%s%s?%s', $key['scheme'], $key['host'], implode('/', $paths), implode('&', $queries));
}
您的示例中的用法是:
# output: https://example.com/abcd/data?data=1&data2=2&data3=3&p=123&x=ABCDSS
rewrite_data('https://example.com/?data=1&data2=2&data3=3', 'https://example.com/abcd/data?p=123&x=ABCDSS');
在 3v4l.org
上查看它的运行情况