有没有办法可以使用PHP从链接中删除变量,例如,如果我有一个读取http://localhost/link/index.php?s=30&p=3
的链接,我将如何删除?s=30&p=3
,以便我的链接读取{{1} }}
答案 0 :(得分:10)
list($url) = explode("?", $longUrl, 2);
答案 1 :(得分:6)
修改(suggested by Hoohah):
此外,您可以使用strstr()(PHP 5.3.0以后):
echo strstr($longurl, "?", TRUE);
PHP具有内置功能。</ strong>
是parse_url()。看一下可能的返回值。在这种情况下,我们可以使用scheme
,host
和path
。
例如:
<?php
$info = parse_url("http://localhost/link/index.php?s=30&p=3");
echo $info["scheme"] . "://" . $info["host"] . $info["path"];
// Output: http://localhost/link/index.php
?>
此方法优于使用explode()
的优势在于,它可让您控制是否要显示用户名,密码和端口(如果包含)。上面的代码不会显示任何这些代码,因此http://user:pass@localhost:81/link/index.php?s=30&p=3
将返回http://localhost/link/index.php
,删除用户名,密码和端口号,这是我认为您想要的。用户名,密码和端口以$info["user"]
,$info["pass"]
和$info["port"]
提供。
如果密码包含问号, explode()
方法将失败。 This method doesn't fail even with ?
and @
signs in the password。
作为最后一点,如果您要处理端口号,用户名和密码,您可以使用下面的代码(有一行添加的行)来删除用户名和密码,但保留端口号:
<?php
$info = parse_url("http://user:__?**@@@@&?ss@localhost:80/link/index.php?s=30&p=3");
// If port is present add a colon before it, if not make it an empty string.
isset($info["port"]) ? $port = ":" . $info["port"] : $port ="";
echo $info["scheme"] . "://" . $info["host"] . $port . $info["path"];
// Outputs: http://localhost:80/link/index.php
?>
最后,你真的不应该在链接中使用用户名和密码。来自RFC2396
某些URL方案在userinfo中使用“user:password”格式 领域。这种做法不推荐,因为通过了 已证明明文(例如URI)中的身份验证信息 几乎在所有使用过的情况下都存在安全风险。
答案 2 :(得分:2)
试试这个:
$pos = strpos($url, '?');
if($pos !== FALSE) {
$url = substr($url, 0, $pos);
}
答案 3 :(得分:0)
$url = 'http://localhost/link/index.php?s=30&p=3';
$d = explode("?", $url);
$stripped = reset($d);
答案 4 :(得分:0)
我没有对此进行过测试,但您可能会执行以下操作:
$my_url = 'http://localhost/link/index.php?s=30&p=3';
$split = explode('?', $my_url);
$new_url = $split[0];
答案 5 :(得分:0)
$fullUrl = "http://localhost/link/index.php?s=30&p=3#dontreplace";
$urlData = parse_url($fullUrl);
$url = str_replace('?'.$urlData['query'],'',$fullUrl);
此解决方案考虑到您可以在参数后面添加一个#标签,但不会替换它。
如果你只是不关心什么是后?然后使用其他答案
答案 6 :(得分:0)
parse_url('http://localhost/link/index.php?s=30&p=3',PHP_URL_PATH);
答案 7 :(得分:0)
$url = strtok($url,"?");
答案 8 :(得分:0)
如果U需要解析所请求的url,U可以简单地从全局变量中获取它:
// http://localhost/foo/bar?foo=bar&Foo1=Bar1
var_dump($_SERVER['QUERY_STRING']); // string(17) "foo=bar&Foo1=Bar1"
如果使用symfony / http-foundation组件,U可以从其Request类获取查询字符串,如下所示:
$request = \Symfony\Component\HttpFoundation\Request::createFromGlobals();
$queryString = $request->getQueryString();