2009-11-26 67 views
7

我试图从引用网址获取搜索关键字。目前,我正在为Google网址使用以下代码。但有时它不工作...使用PHP从(搜索引擎)引荐网址获取关键字使用PHP

$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); 

是否有另一种/干净/工作的方式来做到这一点?

谢谢 普拉萨德

回答

14

如果你使用PHP5看看http://php.net/parse_urlhttp://php.net/parse_str

例子:

 

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

// Parse the URL into an array 
$parsed = parse_url($referrer, PHP_URL_QUERY); 

// Parse the query string into an array 
parse_str($parsed, $query); 

// Output the result 
echo $query['q']; 
+0

谢谢你的快速答复... – pnm123 2009-11-26 19:39:31

+0

没问题,如果您的问题得到解答,请点击正确答案下的检查,以便大家都知道这是回答。 – William 2009-11-26 19:41:36

+0

PHP_URL_QUERY不起作用,因为新的“ajax'd”google使用'#'将字段与查询字符串分开,而不是'?'。所以你得到一个空的数组 - 一个解决方案可能是找到一个'#'的第一个实例并将其替换为'?'在处理前的网址 – 2011-08-13 11:16:56

0
$query = parse_url($request, PHP_URL_QUERY); 
+1

更新我的帖子以添加第二个参数。我希望他会查找方法,看看它是如何工作的,但哦。 – William 2009-11-26 19:34:53

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" 

谢谢 普拉萨德

+0

在我的示例中,您还可以检查数组键q或p是否存在,如果是这样,则使用该键代替另一个。说实话,我建议检查它来自的域名并使用基于此的数据。截至目前,任何来自任何使用“q”或“p”的网站的用户看起来都会来自Google/Yahoo。 – William 2009-11-26 20:09:24

+0

为了防止这种情况,我使用了这个>>> if(preg_match('/ [\。\\](google | yahoo | bing | geegain | mywebsearch | ask | alltheweb)\。[az \。] {2,5} [\ /]/i',$ referrer,$ search_engine)){<<< – pnm123 2009-11-26 20:45:55

+0

pnm123解决方案找到任何p =可能包含cp = - 哪个google url具有的元素,这不会导致关键字的查询字符串。 – 2011-08-13 11:16:09

0

这一个应该适用于谷歌,Bing和有时,雅虎搜索:

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; 
} 
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/

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' 
//); 


?>