Php 如何从当前URL中删除最后一个查询

Php 如何从当前URL中删除最后一个查询,php,Php,假设我当前的url是 http://domain.com/category/clothing-personal-items/&page=3 我使用$\u服务器[“请求URI”]获取当前请求URI $url = $_SERVER["REQUEST_URI"]; print_r(parse_url($url)); echo parse_url($url, PHP_URL_PATH); 阵列输出 Array ( [path] => /category/clothing-p

假设我当前的url是

http://domain.com/category/clothing-personal-items/&page=3
我使用
$\u服务器[“请求URI”]
获取当前请求URI

$url = $_SERVER["REQUEST_URI"];

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
阵列输出

Array
(
    [path] => /category/clothing-personal-items/&page=3
)
问题:

如何仅检索
/category/sweets personal items/
删除
/category/sweets personal items/
之后的任何查询

$url = explode("?", $url);
$url = array_shift($url);         // explode by ? if it is there
$url = explode("&", $url);
$url = array_shift($url);       // other wise explode by & and return the first item

然后只需将$new_查询字符串添加到当前的$_服务器['SCRIPT_NAME']

是否确定在
page=3
之前没有
?为什么不以标准的“?”字符开始查询字符串?您只需
分解('?',$url)
并获取第一个数组组件。@kampit然后
分解('&',$url)
取而代之。@kampit我认为您的路由类中有一个bug。查询字符串必须以
开头。换句话说,
&
之后的所有内容都将被视为URI的一部分,而不是查询。它可能会导致一些问题,包括搜索引擎优化。
$parsed = parse_url($url, PHP_URL_PATH);
if(preg_match('/[^&?]+/',$parsed['path'],$matches))
    $path = $matches[0];
else
    echo "No path found";
$parsed = parse_url($url, PHP_URL_PATH);
if(preg_match('/[^&?]+/',$parsed['path'],$matches))
    $path = $matches[0];
else
    echo "No path found";