我使用PHP构建当前页面的URL。的形式

www.example.com/myurl.html?unwantedthngs

是要求。我想把?和它后面的所有内容(querystring),这样得到的URL就变成:

www.example.com/myurl.html

我现在的代码是这样的:

<?php
function curPageURL() {
    $pageURL = 'http';
    if ($_SERVER["HTTPS"] == "on") {
        $pageURL .= "s";
    }
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"] . ":" .
            $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
?>

当前回答

试试这个

$url_with_querystring = 'www.example.com/myurl.html?unwantedthngs';
$url_data = parse_url($url_with_querystring);
$url_without_querystring = str_replace('?'.$url_data['query'], '', $url_with_querystring);

其他回答

假设你仍然想要在没有查询参数的情况下获得URL(如果它们没有设置),只需使用一个简略的if语句来检查strpos:

$request_uri = strpos( $_SERVER['REQUEST_URI'], '?' ) !== false ? strtok( $_SERVER["REQUEST_URI"], '?' ) : $_SERVER['REQUEST_URI'];

使用PHP Manual - parse_url()来获取您需要的部分。

编辑(例如@Navi Gamage的用法)

你可以这样使用它:

<?php
function reconstruct_url($url){
    $url_parts = parse_url($url);
    $constructed_url = $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'];

    return $constructed_url;
}

?>

编辑(第二个完整示例):

更新功能,确保方案将附加,没有通知msgs出现:

function reconstruct_url($url){
    $url_parts = parse_url($url);
    $constructed_url = $url_parts['scheme'] . '://' . $url_parts['host'] . (isset($url_parts['path'])?$url_parts['path']:'');

    return $constructed_url;
}

$test = array(
    'http://www.example.com/myurl.html?unwan=abc',
    `http://www.example.com/myurl.html`,
    `http://www.example.com`,
    `https://example.com/myurl.html?unwan=abc&ab=1`
);

foreach($test as $url){
    print_r(parse_url($url));
}

将返回:

Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /myurl.html
    [query] => unwan=abc
)
Array
(
    [scheme] => http
    [host] => www.example.com
    [path] => /myurl.html
)
Array
(
    [scheme] => http
    [host] => www.example.com
)
Array
(
    [path] => example.com/myurl.html
    [query] => unwan=abc&ab=1
)

这是通过不带第二个参数的parse_url()传递示例url的输出(仅供解释)。

这是使用构造URL后的最终输出:

foreach($test as $url){
    echo reconstruct_url($url) . '<br/>';
}

输出:

http://www.example.com/myurl.html
http://www.example.com/myurl.html
http://www.example.com
https://example.com/myurl.html
$val = substr( $url, 0, strrpos( $url, "?"));

要从请求URI中删除查询字符串,请将查询字符串替换为空字符串:

function request_uri_without_query() {
    $result = $_SERVER['REQUEST_URI'];
    $query = $_SERVER['QUERY_STRING'];
    if(!empty($query)) {
        $result = str_replace('?' . $query, '', $result);
    }
    return $result;
}

试试这个

$url_with_querystring = 'www.example.com/myurl.html?unwantedthngs';
$url_data = parse_url($url_with_querystring);
$url_without_querystring = str_replace('?'.$url_data['query'], '', $url_with_querystring);