我使用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;
}
?>

当前回答

最好的解决办法:

echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

如果你正在向同一个域提交表单,则不需要在<form action="">中包含http://example.com。

其他回答

你可以像这样使用parse_url内置函数:

$baseUrl = $_SERVER['SERVER_NAME'] . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

要从请求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);

如果你想获取请求路径(更多信息):

echo parse_url($_SERVER["REQUEST_URI"])['path']

如果你想删除查询和(也可能是片段):

function strposa($haystack, $needles=array(), $offset=0) {
        $chr = array();
        foreach($needles as $needle) {
                $res = strpos($haystack, $needle, $offset);
                if ($res !== false) $chr[$needle] = $res;
        }
        if(empty($chr)) return false;
        return min($chr);
}
$i = strposa($_SERVER["REQUEST_URI"], ['#', '?']);
echo strrpos($_SERVER["REQUEST_URI"], 0, $i);

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

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