我正在使用PHP脚本。
我有一个类似http://example.com?tag=test1&creative=165953&creativeASIN=B07BH2N15X&linkCode=df0&ascsubtag=test2的URL。在查询字符串中,tag = test1和ascsubtag = test2,我知道值test1和test2不是键。现在,我想从URL中删除键标签和ascsubtag,以用于敏感目的。
预期输出为http://example.com?creative=165953&creativeASIN=B07BH2N15X&linkCode=df0。我如何以简单的方式实现这一目标。
我尝试了以下代码,
$a = parse_url("http://example.com?tag=test1&creative=165953&creativeASIN=B07BH2N15X&linkCode=df0&ascsubtag=test2");
parse_str($a['query'], $queryStr);
$interchanged = array_flip($queryStr);
unset($interchanged['test1']);
unset($interchanged['test2']);
echo $a['scheme'] . "://" . $a['host'] . (isset($pURL['path']) ? $pURL['path'] : '') . "?" . http_build_query(array_flip($interchanged));
还有其他方法可以实现吗?
答案 0 :(得分:0)
一种更简单的解决方案(恕我直言,并且更易于维护)是使用array_filter()
删除原始代码中不需要的任何值,而不是使用flip / unset / flip方法...
$a = parse_url("http://example.com?tag=test1&creative=165953&creativeASIN=B07BH2N15X&linkCode=df0&ascsubtag=test2");
parse_str($a['query'], $queryStr);
$interchanged = array_filter($queryStr, function($value) { return ( $value != "test1" && $value != "test2");});
echo $a['scheme'] . "://" . $a['host'] . (isset($pURL['path']) ? $pURL['path'] : '') . "?" . http_build_query($interchanged);