Frage

Ich versuche, die Suche Schlüsselwort aus einer Referrer-URL zu erhalten. Derzeit bin ich mit dem folgenden Code für Google URLs. Aber manchmal ist es nicht funktioniert ...

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

Gibt es eine andere / sauber / Arbeits Art und Weise, dies zu tun?

Danke, Prasad

War es hilfreich?

Lösung

Wenn Sie mit PHP5 einen Blick auf http://php.net/parse_url und http://php.net/parse_str

Beispiel:

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

Andere Tipps

Es gibt verschiedene Abfrage-Strings auf verschiedene Suchmaschinen. Nach Wiliam Methode versucht, ich habe meine eigene Methode herausgefunden. (Weil, Yahoo wird mit 'p', aber manchmal '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"

Danke, Prasad

die anderen Antworten Ergänzung zu beachten, dass die Query-String-Parameter, der die Suchbegriffe enthalten, die durch Suchanbieter variieren. Dieser Code-Schnipsel von PHP zeigt den richtigen Parameter zu verwenden:

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

Quelle: http://betterwp.net/wordpress-tips / get-search-Keywords-from-Referrer /

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


?>
$query = parse_url($request, PHP_URL_QUERY);

Dies sollte für Google, Bing arbeiten und manchmal, Yahoo Search:

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

Ich glaube, Google und Yahoo hatte ihren Algorithmus aktualisiert Suche Schlüsselwörter und andere params in der URL ausschließen, die HTTP_REFERRER Methode wird nicht empfangen werden.

Bitte lassen Sie mich wissen, ob über Empfehlungen immer noch die Suche Schlüsselwörter liefern.

Was erhalte ich bin jetzt unten, wenn Referrer auf meiner Website Ende verwendet wird.

von Google: https://www.google.co.in/ von Yahoo: https://in.yahoo.com/

Ref: https: //webmasters.googleblog .com / 2012/03 / bevorstehenden-Änderungen in googles-http.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top