8

我正在尝试从引荐来源网址获取搜索关键字。目前,我正在为 Google 网址使用以下代码。但有时它不起作用...

$query_get = "(q|p)";
$referrer = "http://www.google.com/search?hl=en&q=learn+php+2&client=firefox";
preg_match('/[?&]'.$query_get.'=(.*?)[&]/',$referrer,$search_keyword);

是否有另一种/干净/有效的方法来做到这一点?

谢谢你,普拉萨德

4

7 回答 7

16

如果您使用的是 PHP5,请查看http://php.net/parse_urlhttp://php.net/parse_str

例子:

// 引用者
$referrer = 'http://www.google.com/search?hl=en&q=learn+php+2&client=firefox';

// 将 URL 解析为数组
$parsed = parse_url($referrer, PHP_URL_QUERY);

// 将查询字符串解析为数组
parse_str($parsed, $query);

// 输出结果
回声$查询['q'];
于 2009-11-26T19:25:54.667 回答
1

不同的搜索引擎上有不同的查询字符串。在尝试了 Wiliam 的方法后,我找到了自己的方法。(因为,雅虎使用'p',但有时使用'q')

$referrer = "http://search.yahoo.com/search?p=www.stack+overflow%2Ccom&ei=utf-8&fr=slv8-msgr&xargs=0&pstart=1&b=61&xa=nSFc5KjbV2gQCZejYJqWdQ--,1259335755";
$referrer_query = parse_url($referrer);
$referrer_query = $referrer_query['query'];
$q = "[q|p]"; //Yahoo uses both query strings, I am using switch() for each search engine
preg_match('/'.$q.'=(.*?)&/',$referrer,$keyword);
$keyword = urldecode($keyword[1]);
echo $keyword; //Outputs "www.stack overflow,com"

谢谢你,普拉萨德

于 2009-11-26T19:48:22.347 回答
1
<?php 
class GET_HOST_KEYWORD 
{ 
    public function get_host_and_keyword($_url) { 
        $p = $q = "";
        $chunk_url = parse_url($_url); 
        $_data["host"] = ($chunk_url['host'])?$chunk_url['host']:''; 
        parse_str($chunk_url['query']); 
        $_data["keyword"] = ($p)?$p:(($q)?$q:''); 
        return $_data; 
    } 
}     
// Sample Example 
$obj = new GET_HOST_KEYWORD(); 
print_r($obj->get_host_and_keyword('http://www.google.co.in/search?sourceid=chrome&ie=UTF-&q=hire php php programmer')); 

// sample output
//Array
//(
//    [host] => www.google.co.in
//    [keyword] => hire php php programmer
//)

// $search_engines = array(
//    'q' => 'alltheweb|aol|ask|ask|bing|google',
//    'p' => 'yahoo',
//    'wd' => 'baidu',
//    'text' => 'yandex'
//);


?>
于 2014-03-14T10:44:24.440 回答
1

为了补充其他答案,请注意包含搜索词的查询字符串参数因搜索提供商而异。这个 PHP 片段显示了要使用的正确参数:

$search_engines = array(
    'q' => 'alltheweb|aol|ask|ask|bing|google',
    'p' => 'yahoo',
    'wd' => 'baidu',
    'text' => 'yandex'
);

来源:http ://betterwp.net/wordpress-tips/get-search-keywords-from-referrer/

于 2012-08-03T14:25:46.777 回答
0
$query = parse_url($request, PHP_URL_QUERY);
于 2009-11-26T19:32:38.520 回答
0

这个应该适用于谷歌、必应,有时适用于雅虎搜索:

if( isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']) {
    $query = getSeQuery($_SERVER['HTTP_REFERER']);
    echo $query;
} else {
    echo "I think they spelled REFERER wrong? Anyways, your browser says you don't have one.";
}



function getSeQuery($url = false) {
    $segments = parse_url($url);
    $keywords = null;
    if($query = isset($segments['query']) ? $segments['query'] : (isset($segments['fragment']) ? $segments['fragment'] : null)) {
    parse_str($query, $segments);
    $keywords = isset($segments['q']) ? $segments['q'] : (isset($segments['p']) ? $segments['p'] : null);
    }
    return $keywords;
}
于 2012-04-04T06:07:10.320 回答
0

我相信 google 和 yahoo 已经更新了他们的算法,以排除使用 http_referrer 方法无法接收的 url 中的搜索关键字和其他参数。

请让我知道上述建议是否仍会提供搜索关键字。

在我的网站端使用 http 引荐来源网址时,我现在收到的内容如下。

来自谷歌:https ://www.google.co.in/ 来自雅虎:https ://in.yahoo.com/

参考:https ://webmasters.googleblog.com/2012/03/upcoming-changes-in-googles-http.html

于 2017-03-27T10:01:39.090 回答