2009-09-22 4 views
1

Je veux utiliser la requête que quelqu'un a utilisé pour trouver ma page, ceux-ci sont dans l'URL de la page de référence $ GET _ ['q'] (et pour yahoo $ GET_ [ 'p']). Comment puis-je les utiliser? Je veux quelque chose comme $ query = REFERRING PAGE ($ GET _ ['q']), mais je n'arrive pas à trouver le moyen de le dire.Comment puis-je obtenir des informations de requête de moteurs de recherche

Répondre

5

Les informations que vous recherchez est disponible dans $_SERVER['HTTP_REFERER']

Par exemple, venant d'une page avec cette URL: http://tests/temp/temp-2.php?q=test+glop, cette partie du code:

var_dump($_SERVER['HTTP_REFERER']); 

donne:

string 'http://tests/temp/temp-2.php?q=test+glop' (length=40) 


Vous pouvez utiliser parse_url pour obtenir la chaîne de requête de ce U RL:

$query = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY); 
var_dump($query); 

vous obtiendrez:

string 'q=test+glop' (length=11) 


Maintenant, vous pouvez analyser cette chaîne de requête avec parse_str; ce code:

$params = array(); 
parse_str($query, $params); 
var_dump($params); 

Est-ce que vous obtenez:

array 
    'q' => string 'test glop' (length=9) 


Et enfin, vous pouvez vérifier si le paramètre qui vous intéresse est dans ce tableau:

if (isset($params['q'])) { 
    var_dump($params['q']); 
} 

Donnera nous, dans cet exemple:

string 'test glop' (length=9) 


Et le tour est joué ;-)

noter simplement que le Referer est envoyé par le client, ce qui signifie:

  • il peut être forgé, et peut contenir quoi que ce soit - y compris mauvaises choses (attention aux injections SQL et XSS!)
  • c'est optionnel: le navigateur n'est pas obligé de l'envoyer.
+0

+1: Excellente réponse. Il vaut également la peine de souligner que oui, il est vraiment orthographié "referer" dans le contexte de HTTP. 8-) – RichieHindle

+0

Merci! Ergh, en lisant votre commentaire, j'ai d'abord pensé "oh, est-ce que je l'ai mal orthographié?" ^^ Une chose plus drôle dans notre travail quotidien ^^ –

+0

J'ai peur de ne pas suivre. Si je dis: $ query = $ _SERVER ['HTTP_REFERER']; puis $ query = l'adresse complète de google. Si je dis: $ query = parse_url ($ _ SERVER ['HTTP_REFERER'], PHP_URL_QUERY); var_dump ($ query); La requête $ n'a alors aucune valeur. Ai-je besoin d'inclure les var_dumps ou sont-ce juste pour mes études? –

Questions connexes