2009-11-26 148 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' 
//); 


?>