1

我正在尝试从 url 中删除查询字符串,但我需要保持第一个键/var 不变。所以我知道第一次出现的&符号是我想要丢弃查询字符串的点。最好的方法是什么?下面是我的代码,它目前只是一直附加到查询字符串。

<a href="<?php echo $_SERVER["REQUEST_URI"] ?>&sortkey=year&sortval=asc">
4

4 回答 4

2

你可以简单地匹配所有不是 & 符号的东西,直到我们找到第一个 & 符号。例如

$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 快得多。

于 2012-04-24T11:07:17.910 回答
1

使用strpos函数找到 & 符号的位置。然后使用substr函数获取 URL 的部分直到该点。

于 2012-04-24T10:37:46.770 回答
1

如果我正确理解了您的问题,那么您想在第一次出现&符号后删除所有内容。你可以使用这样的东西:

<?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) 替换,它是第一次出现 之前的任何内容&

于 2012-04-24T10:45:15.020 回答
0

strpos 可以,但除非您使用 RewriteRule,否则 $_SERVER['SCRIPT_NAME'] 或 $_SERVER['PHP_SELF'] 就足够了(并且可能更有效)。

如果 URL 正在重写,则 $_SERVER['REDIRECT_URL'] 更合适。

编辑:我错过了保留查询字符串第一部分的内容:s

于 2012-04-24T10:43:47.733 回答