我使用PHP构建当前页面的URL。有时,网址为
www.mydomian.com/myurl.html?unwantedthngs
请求。我想删除?
及其后面的所有内容(查询字符串),以便生成的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;
}
?>
答案 0 :(得分:514)
您可以在strtok
?
来获取字符串
$url=strtok($_SERVER["REQUEST_URI"],'?');
答案 1 :(得分:63)
使用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.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后的最终输出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
答案 2 :(得分:51)
最佳解决方案:
echo parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
如果您要将表单提交到同一个域,则无需在自己的http://domain.com中加入。
答案 3 :(得分:11)
$val = substr( $url, 0, strrpos( $url, "?"));
答案 4 :(得分:6)
你需要至少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
答案 5 :(得分:6)
最简单的方法
$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
答案 6 :(得分:2)
如果您想获取请求路径(more info):
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);
答案 7 :(得分:1)
您可以尝试:
<?php
$this_page = basename($_SERVER['REQUEST_URI']);
if (strpos($this_page, "?") !== false) $this_page = reset(explode("?", $this_page));
?>
答案 8 :(得分:1)
要从请求URI中删除查询字符串,请将查询字符串替换为空字符串:
function request_uri_without_query() {
$result = $_SERVER['REQUEST_URI'];
$query = $_SERVER['QUERY_STRING'];
if(!empty($query)) {
$result = str_replace('?' . $query, '', $result);
}
return $result;
}
答案 9 :(得分:1)
因为我处理了相对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;
}
答案 10 :(得分:0)
试试这个
$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);
答案 11 :(得分:0)
也可以按照php manual comment
使用以下内容<InlineUIContainer BaselineAlignment="Center">
<ContentPresenter Content="123" />
</InlineUIContainer>
请注意,这仅适用于某些PHP环境,请按照该页面的下面的注释获取更多信息;
目的:当前PHP文件的URL路径名称path-info为N / A 并排除URL查询字符串。包括斜杠。
注意:这是在URL重写之前(即,按照原始 呼叫网址)。
注意:并非在所有PHP环境中都设置,并且绝对仅在具有 URL重写。
可以在网络模式下使用:是
在CLI模式下工作:否
答案 12 :(得分:0)
您可以像这样使用parse_url内置函数:
$baseUrl = $_SERVER['SERVER_NAME'] . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
答案 13 :(得分:0)
假设您仍想获取不带查询参数的URL(如果未设置),只需使用简写的if语句来检查if ( ! inputfile.good() )
{
ofstream outputfile(myfile);
cout << "Enter your FIRST and LAST name." << endl;
getline(cin, name);
outputfile << name << endl;
cout << "Hello " << name << endl;
cout << "Enter your initial balance." << endl;
cin >> balance;
outputfile << balance << endl;
// No need to explicitly close the file, as the destructor will handle that.
}
else
{
// etc.
:
strpos
答案 14 :(得分:-1)
如果您使用Laravel,这是一个简单的解决方案:
Str::before($request->getRequestUri(), '?')
答案 15 :(得分:-3)
试试这个:
$urrl=$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']
或
$urrl=$_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']