PHP kullanarak (arama motoru) yönlendirme url anahtar alın

4 Cevap php

Ben bir yönlendirme url gelen arama anahtar almak için çalışıyorum. Şu anda, Google URL'ler için aşağıdaki kodu kullanıyorum. Ama bazen çalışmıyor ...

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

Bunu yapmak için başka bir temiz / / çalışma yolu var mı?

Thank you, Prasad

4 Cevap

Eğer kullanıyorsanız PHP5 http://php.net/parse%5Furl ve http://php.net/parse%5Fstr bir göz atın

Örnek:


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

Farklı arama motorlarında farklı sorgu dizeleri vardır. William'ın yöntemi denedikten sonra, benim kendi yöntemini anladım. (Çünkü, Yahoo'nun 'q' p 'kullanarak, ama bazen)

$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"

Thank you, Prasad

Diğer yanıtları tamamlamak için, arama terimlerini içeren sorgu dizesi parametresi arama sağlayıcıya göre değişir unutmayın. PHP'nin bu pasajı kullanmak doğru parametreyi gösterir:

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

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

Bu bir Google, Bing ve bazen, Yahoo Arama için çalışması gerekir:

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