如何删除查询string,并只获得url?
我使用PHP来构build当前页面的URL。 有时候,URL的forms是
www.mydomian.com/myurl.html?unwantedthngs
被要求。 我想删除?
以及它后面的所有内容(查询string),使得生成的URL变成:
www.mydomain.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; } ?>
你可以使用strtok
得到string之前第一次发生?
$url=strtok($_SERVER["REQUEST_URI"],'?');
使用PHP手册 – 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; } ?>
编辑(第二个完整的例子):
更新function,以确保scheme将附加,并没有通知消息出现:
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 )
这是通过传递示例URL通过parse_url()没有第二个参数(仅供解释)的输出。
这是使用以下命令构buildurl之后的最终输出:
foreach($test as $url){ echo reconstruct_url($url) . '<br/>'; }
输出:
http://www.mydomian.com/myurl.html http://www.mydomian.com/myurl.html http://www.mydomian.com https://mydomian.com/myurl.html
最佳解决scheme
echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
如果您要将表单提交到同一个域名,则无需在您的http://domain.com中join。;
$val = substr( $url, 0, strrpos( $url, "?"));
最简单的方法
$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
您至less需要PHP版本5.4才能实现此解决scheme,而不必在一行中爆炸variables,然后连接下一个variables,但一个简单的class轮将是:
$_SERVER["HTTP_HOST"].explode('?', $_SERVER["REQUEST_URI"], 2)[0];
服务器variables: http : //php.net/manual/en/reserved.variables.server.php
数组解引用: https : //wiki.php.net/rfc/functionarraydereferencing
你可以试试:
<?php $this_page = basename($_SERVER['REQUEST_URI']); if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page)); ?>
要从请求URI中删除查询string,请将查询stringreplace为空string:
function request_uri_without_query() { $result = $_SERVER['REQUEST_URI']; $query = $_SERVER['QUERY_STRING']; if(!empty($query)) { $result = str_replace('?' . $query, '', $result); } return $result; }
如果你想获得请求path( 更多信息 ):
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,所以我更新了veritas的解决scheme,如下面的代码。
你可以尝试在这里: 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; }
尝试这个
$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);
尝试这个:
$urrl=$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']
要么
$urrl=$_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']