在第一次&符后删除剩余的查询字符串

时间:2012-04-24 10:31:32

标签: php regex query-string

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

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

4 个答案:

答案 0 :(得分:2)

在我们击中第一个&符号之前,您可以简单地匹配不是&符号的所有内容。 E.g。

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

答案 1 :(得分: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),这是第一次出现&之前的任何内容。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

编辑:我忽略了保留查询字符串的第一部分:s