function getUrlCurrently() {
$pageURL = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
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。我想知道是否可以扩展此函数以取消设置预定的$ _GET参数。
我的所有$ _GET值都存储在一个数组中。所以我可以使用
访问特定值$my_array[0]
使用我建议的逻辑来完成这项任务是否昂贵且不现实?
编辑:我只想打印URL以将其用作链接。
我的网址中有GET参数。
答案 0 :(得分:7)
不确定您真正想要做什么,但$_GET
(以及其他超级全局)不是只读的:
unset()
值。请注意,修改$_GET
通常不被视为良好做法:当人们阅读某些代码时,他希望$_GET
中的内容来自URL中的参数 - 而不是来自你的代码。
例如,你绝对可以这样做:
unset($_GET['my_item']);
答案 1 :(得分:2)
更新您的功能:
function getUrlCurrently($filter = array()) {
$pageURL = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ? "https://" : "http://";
$pageURL .= $_SERVER["SERVER_NAME"];
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= ":".$_SERVER["SERVER_PORT"];
}
$pageURL .= $_SERVER["REQUEST_URI"];
if (strlen($_SERVER["QUERY_STRING"]) > 0) {
$pageURL = rtrim(substr($pageURL, 0, -strlen($_SERVER["QUERY_STRING"])), '?');
}
$query = $_GET;
foreach ($filter as $key) {
unset($query[$key]);
}
if (sizeof($query) > 0) {
$pageURL .= '?' . http_build_query($query);
}
return $pageURL;
}
// gives the url as it is
echo getUrlCurrently();
// will remove 'foo' and 'bar' from the query if existent
echo getUrlCurrently(array('foo', 'bar'));
答案 2 :(得分:1)
要在数组中组装带有GET参数的链接,请尝试:
unset($my_array['key']);
$url = getUrlCurrently() . '?' . http_build_query($my_array);
请参阅http://www.php.net/manual/en/function.http-build-query.php
答案 3 :(得分:1)
这与$ _GET有关。您可以使用现有的全局数据$ _SERVER或getenv,如下所示:
function GetCurrentUrl($debug=FALSE) {
$pageURL = (strtolower($_SERVER["HTTPS"]) == "on") ? "https://" : "http://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
// DEBUG
if ($debug) {
$msg = "DEBUG MODE: current URL= ".$pageURL ;
if (function_exists('debug_msg')) {
debug_msg($msg , $debug) ;
}else {
echo $msg ;
}
}
return $pageURL;
}
编辑:但我看到你的$ _GET语句来自哪里。你的意思是URI内容一些参数。您可以通过$ _SERVER ['REQUEST_URI']获取它们,或者使用http_build_query
作为更好的建议EDIT2: 最重要的是,关于问题的一个方面,您还可以添加一个解决方法来设置类似“重写”的函数,如this php manual interesting example中所述。
答案 4 :(得分:0)
用户$_SERVER['SCRIPT_URI']
会不会更容易?
它返回没有查询参数的完整URL。
答案 5 :(得分:0)
//your query string is ?a=1&b=2&c=3
function unset_get($param){
//sets string to (array) $query_string
parse_str($_SERVER['QUERY_STRING'],$query_string);
//removes array element defined by param
unset($query_string[$param]);
//returns modified array as a string
return http_build_query($query_string);
}
print unset_get( 'b');
//returns "a=1&c=3"