我正在尝试从 url 中删除查询字符串,但我需要保持第一个键/变量不变。所以我知道第一次出现的 & 符号是我想丢弃查询字符串的点。最好的方法是什么?下面是我的代码,它目前只是一直附加到查询字符串。
<a href="<?php echo $_SERVER["REQUEST_URI"] ?>&sortkey=year&sortval=asc">
您可以简单地匹配所有不是 & 符号的内容,直到我们达到第一个 & 符号。
例如$incomingURI = 'http://www.example.com/?id=12&left=right&up=down';
preg_match('/[^&]+/', $incomingURI, $match);
$outgoingURI = $match[0];
上面的代码将在变量 $outgoingURI 中输出以下内容:
http://www.example.com/?id=12
这将比使用preg_replace快得多。
如果我正确理解了您的问题,您想在第一次出现 & 符号之后删除所有内容。你可以使用这样的东西:
<?php
$uri = 'blah.blah.com?a=b&sortkey=year&sortval=asc';
$new_uri = preg_replace("/([^&]+)&(.*)/", "$1", $uri)
?>
模式:
([^&]+) : Match everything except '&'
& : First '&'
(.*) : Any thing after that
替换为第一组 ($1
),这是第一次出现&
之前的任何内容。
使用 strpos 函数查找与号的位置。然后使用 substr 函数获取 URL 的一部分,直到该点。
strpos都可以工作,但除非你使用的是RewriteRule,否则$_SERVER['SCRIPT_NAME']或$_SERVER['PHP_SELF']应该就足够了(并且可能更有效)。
如果要重写 URL,则 $_SERVER['REDIRECT_URL'] 更合适。
编辑:我错过了关于保留查询字符串第一部分的部分:s