$ _GET,Ampersand打断了

时间:2013-02-19 14:25:53

标签: php get

尝试使用$ _GET ['url']变量从网址抓取数据:

http://mysite.com/?url= http://this.is/?q=an&?example=url

上面我想要的是粗体,但遗憾的是$ _GET ['url']只会获得“http:// this.is/?q=an”,因为&使它将其解释为URL中新变量的开头。

有没有办法忽略&符号,所以我的脚本可以获取我需要的整个URL?附加到?url =的URL不在我的限制范围内,因此控制所以大多数工作,但有些确实包含可怕的&amp ;.在阅读Stack Overflow上的问题后,我并没有抱太大希望:(

4 个答案:

答案 0 :(得分:4)

如果您完全无法控制查询字符串上的参数(无论出于何种原因),您也可以通过手动解析$_SERVER['QUERY_STRING']变量来完成此操作,例如

$page = str_replace("url=", "", $_SERVER['QUERY_STRING']);

当然,如果可能的话,你应该使用其他人发布的答案对其进行编码。

答案 1 :(得分:1)

使用urlencode()

$get_url = urlencode('http://this.is/?q=an&?example=url');
$url = 'http://mysite.com/?url=' . $get_url;

答案 2 :(得分:0)

如果无法控制查询字符串,可以使用

$query = $_SERVER['QUERY_STRING'];
$pos = strpos($query, "url=");
if ($pos !== false) {
    $url = substr($query, $pos + 4);
}

此代码在url=

之后返回

如果您有可能,则应使用urlencode对网址进行编码以创建一个干净的网址。 如果你不这样做,你最终会得到服务器错误,有奇怪的网址,你不能传递多个网址(因为url =之后的所有内容都被解释为网址)

答案 3 :(得分:0)

以下是经过测试的代码:

if (!empty($_GET['url'])) {
    echo $_GET['url'].'<br />';
}
$url = urlencode('http://this.is/?q=an&?example=url');
echo '<a href="http://mysite.com/?url='.$url.'">LINK</a>';

希望它会对你有所帮助。