php如何处理查询请求,php - 如何删除查询字符串并只获取网址?

php - 如何删除查询字符串并只获取网址?

我使用PHP来构建当前页面的URL。 有时,URL的形式

www.mydomian.com/myurl.html?unwantedthngs

请求。 我想删除?及其后面的所有内容(查询字符串),以便生成的URL变为:

www.mydomain.com/myurl.html

我目前的代码是这样的:

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;

}

?>

12个解决方案

486 votes

您可以使用strtok在首次出现之前获取字符串?

$url=strtok($_SERVER["REQUEST_URI"],'?');

RiaD answered 2019-04-14T12:35:06Z

58 votes

使用PHP手册 - parse_url()来获取所需的部分。

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

你可以像这样使用它:

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.mydomian.com/myurl.html?unwan=abc',

'http://www.mydomian.com/myurl.html',

'http://www.mydomian.com',

'https://mydomian.com/myurl.html?unwan=abc&ab=1'

);

foreach($test as $url){

print_r(parse_url($url));

}

将返回:

Array

(

[scheme] => http

[host] => www.mydomian.com

[path] => /myurl.html

[query] => unwan=abc

)

Array

(

[scheme] => http

[host] => www.mydomian.com

[path] => /myurl.html

)

Array

(

[scheme] => http

[host] => www.mydomian.com

)

Array

(

[path] => mydomian.com/myurl.html

[query] => unwan=abc&ab=1

)

这是通过parse_url()传递示例url而没有第二个参数的输出(仅用于解释)。

这是使用以下构造url后的最终输出:

foreach($test as $url){

echo reconstruct_url($url) . '
';

}

输出:

http://www.mydomian.com/myurl.html

http://www.mydomian.com/myurl.html

http://www.mydomian.com

https://mydomian.com/myurl.html

veritas answered 2019-04-14T12:36:19Z

47 votes

最佳方案:

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

如果您要将表单提交到同一个域,则无需在您的[http://domain.com]中加入。

Ludo - Off the record answered 2019-04-14T12:36:54Z

11 votes

$val = substr( $url, 0, strrpos( $url, "?"));

zellio answered 2019-04-14T12:37:13Z

6 votes

你需要至少PHP版本5.4来实现这个解决方案,而不是在一行上爆炸变量并在下一行连接,但是一个简单的一个衬里将是:

$_SERVER["HTTP_HOST"].explode('?', $_SERVER["REQUEST_URI"], 2)[0];

服务器变量:[http://php.net/manual/en/reserved.variables.server.php]

数组解除引用:[https://wiki.php.net/rfc/functionarraydereferencing]

James Bordine II answered 2019-04-14T12:37:54Z

5 votes

最简单的方式

$url = 'https://www.youtube.com/embed/ROipDjNYK4k?rel=0&autoplay=1';

$url_arr = parse_url($url);

$query = $url_arr['query'];

print $url = str_replace(array($query,'?'), '', $url);

//output

https://www.youtube.com/embed/ROipDjNYK4k

Mukesh Saxena answered 2019-04-14T12:38:19Z

1 votes

你可以试试:

$this_page = basename($_SERVER['REQUEST_URI']);

if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));

?>

ysrb answered 2019-04-14T12:38:39Z

1 votes

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

function request_uri_without_query() {

$result = $_SERVER['REQUEST_URI'];

$query = $_SERVER['QUERY_STRING'];

if(!empty($query)) {

$result = str_replace('?' . $query, '', $result);

}

return $result;

}

Ryan Prechel answered 2019-04-14T12:39:04Z

1 votes

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

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);

user1079877 answered 2019-04-14T12:39:37Z

1 votes

因为我处理相对URL和绝对URL,所以我更新了veritas的解决方案,如下面的代码。

你可以在这里试试自己:[https://ideone.com/PvpZ4J]

function removeQueryStringFromUrl($url) {

if (substr($url,0,4) == "http") {

$urlPartsArray = parse_url($url);

$outputUrl = $urlPartsArray['scheme'] . '://' . $urlPartsArray['host'] . ( isset($urlPartsArray['path']) ? $urlPartsArray['path'] : '' );

} else {

$URLexploded = explode("?", $url, 2);

$outputUrl = $URLexploded[0];

}

return $outputUrl;

}

trante answered 2019-04-14T12:40:09Z

0 votes

试试这个

$url_with_querystring = 'www.mydomian.com/myurl.html?unwantedthngs';

$url_data = parse_url($url_with_querystring);

$url_without_querystring = str_replace('?'.$url_data['query'], '', $url_with_querystring);

kwelsan answered 2019-04-14T12:40:29Z

-3 votes

试试这个:

$urrl=$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']

要么

$urrl=$_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']

HRALDA answered 2019-04-14T12:40:51Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值