【问题标题】:How can I get query information from referring search engines如何从引荐搜索引擎获取查询信息
【发布时间】:2009-09-22 21:26:05
【问题描述】:

我想使用某人用来查找我的页面的查询,这些查询位于引用页面 $GET_['q'] 的 URL 中(对于 yahoo 为 $GET_['p'])。我该如何使用这些?我想要 $query = REFERRING PAGE ($GET_['q']) 之类的东西,但我就是不知道该怎么说。

【问题讨论】:

    标签: php get referrer


    【解决方案1】:

    您正在搜索的信息在$_SERVER['HTTP_REFERER']中提供

    例如,来自具有此 URL 的页面:http://tests/temp/temp-2.php?q=test+glop,这部分代码:

    var_dump($_SERVER['HTTP_REFERER']);
    

    给:

    string 'http://tests/temp/temp-2.php?q=test+glop' (length=40)
    


    您可以使用 parse_url 从该 URL 获取查询字符串:

    $query = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
    var_dump($query);
    

    会得到你:

    string 'q=test+glop' (length=11)
    


    现在,您可以使用 parse_str 解析该查询字符串;这段代码:

    $params = array();
    parse_str($query, $params);
    var_dump($params);
    

    会得到你:

    array
      'q' => string 'test glop' (length=9)
    


    最后,您可以检查您感兴趣的参数是否在该数组中:

    if (isset($params['q'])) {
        var_dump($params['q']);
    }
    

    将给我们,在这个例子中:

    string 'test glop' (length=9)
    


    等等 ;-)

    注意Referer是客户端发送的,意思是:

    • 它可以被伪造,并且可以包含任何东西——包括坏东西(小心 SQL 注入和 XSS!)
    • 它是可选的:浏览器不需要发送它。

    【讨论】:

    • +1:很好的答案。还值得指出的是,是的,在 HTTP 的上下文中它确实被拼写为“referer”。 8-)
    • 谢谢!呃,阅读你的评论,我首先想到的是“哦,我拼错了吗?” ^^ 我们日常工作中还有一件有趣的事^^
    • 恐怕我没跟上。如果我说: $query = $_SERVER['HTTP_REFERER'];然后 $query = 完整的谷歌地址。如果我说: $query = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY); var_dump($查询);然后 $query 没有价值。我是否需要包含 var_dumps 还是仅用于我的教育?
    • 我认为有一种方法可以使用正则表达式并说 $query = $_SERVER['HTTP_REFERER'] 中的 "&p=" 或 "&q=" 和 "&" 之间的所有内容跨度>
    • @pg:这可能是因为,正如 Pascal 指出的那样,referer 标头是可选发送的。如果客户端(浏览器)未发送标头,则无需提取任何内容。是的,var_dump 主要用于调试/测试目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多