我在想是否有办法在PHP / Zend Framework 2中隐藏部分网址。这样的事情:
sitename.com/something/?inviter=1234&id=1
但我想以某种方式隐藏& id = 1的部分,以便当用户复制并输入网址时,它将如下所示:
sitename.com/something/?inviter=1234
另一方面,我可以这样做:
$id = $_GET["id"])
这可能吗,如果可以,怎么做?也许有什么东西接近我想要实现的目标?
答案 0 :(得分:0)
您只能使用Cookie或会话技术隐藏它。但它只能在一个会话期间为一个用户工作。
答案 1 :(得分:0)
您可以使用parse_url,http_build_url,parse_str和http_build_str来解析和重建网址。
例如:
/**
* Transform a url using a whitelist of query-string keys
*/
function transformUrlKeepQueryKeys($url, array $whitelist)
{
// Break the given url into parts
$parts = parse_url($url);
// Break the parts into key-value pairs
$query = $parts['query'];
parse_str($query, $queryParts);
// Unset all unwanted keys
foreach (array_keys($queryParts) as $k) {
if (!in_array($k, $whitelist)) {
unset($queryParts[$k]);
}
}
// rebuild the url
$parts['query'] = http_build_query($queryParts);
// return
return http_build_url('', $parts);
}
调用应该是:
$url = 'http://sitename.com/something/?inviter=1234&id=1';
$whitelist = [
'inviter'
];
$expectedUrl = 'http://sitename.com/something/?inviter=1234';
$actualUrl = transformUrlKeepQueryKeys($url, $whitelist);
assert($expectedUrl == $actualUrl);
或者,您可以使用要删除的黑名单来实现类似的功能。
唯一的问题是函数http_build_url
不包含在核心PHP中,而是PECL HTTP扩展的一部分。如果您无法在您的环境中安装该扩展,那么您可以使用该函数的纯PHP实现,例如here。