2011-02-23 2 views
0

Je fais un site de recherche où les utilisateurs peuvent trouver des choses avec ma table. La recherche fonctionne très bien, mais je souhaite pouvoir autoriser les utilisateurs à effectuer une recherche à la place avec un résultat Google ou Bing. Je voudrais que les gens identifient qu'ils veulent utiliser un moteur de recherche spécifique en indiquant un/après la requête. Par exemple, une recherche de something/google enverrait la recherche à Google. De même pour Bing.Comment trouver et identifier une partie spécifique d'une chaîne?

+0

Ceci est assez large. Quelle est exactement votre question? –

+0

Faire correspondre un suffixe? http://stackoverflow.com/questions/619610/whats-the-most-efficient-test-of-whether-a-php-string-ends-with-another-string – ide

Répondre

2

Si vous êtes à la recherche Google et Bing, ou un petit nombre de moteurs de recherche, vous pouvez essayer:

if (strpos('/google',$_GET['q']) !== false) { 
    header('Location: http://www.google.com/q='.str_replace('/google','',$q).'+site:example.com'); 
    exit; 
} else if (strpos('/bing',$_GET['q']) !== false) { 
    header('Location: http://www.bing.com/search?q='.str_replace('/bing','',$q).'+site:example.com'); 
    exit; 
} 

Remarque , vous devez l'ajouter à votre page avant que le texte ne soit envoyé au tampon de sortie de PHP (en raison de l'appel de la fonction header()). Cela signifie, avant que PHP a été chargé d'écrire quelque chose sur la page. Sinon, vous obtiendrez une erreur sur votre page PHP.

+0

Désolé, j'avais un 'exemple' supplémentaire après un des q et j'ai oublié de changer le drapeau le Bing str_replace. –

2

Vous pouvez utiliser une expression rationnelle pour extraire ces parties de la chaîne de requête. par exemple.

preg_match_all('(?=^|\s)/[a-z]+\b', $query, $matches) 

Permet de retirer tous les jetons qui ont commencé avec une barre oblique et qui ont été suivis par une ou plusieurs lettres de votre requête. Vous pourriez alors lire ces jetons et décider des mesures à prendre pour chacun d'entre eux.

Cette solution d'expression rationnelle est robuste car elle devrait permettre à ces jetons (séparés par des espaces) d'apparaître n'importe où dans votre chaîne de requête, ou même d'avoir plusieurs jetons dans une chaîne de requête.

Vous pouvez également utiliser preg_replace(...) pour supprimer ces jetons de la requête afin de pouvoir traiter le reste du texte de recherche.

+0

Merci pour ça! –

0

Utilisez preg_match pour vérifier la dernière partie de la chaîne de recherche pour /search_engine.

si elle existe les rediriger ensuite

http://www.google.com/search?q=site%3Adomain.com+search+string

+0

Pour quelque chose comme ça, strpos est un meilleur outil à utiliser. Voir le manuel: http://us.php.net/manual/fr/function.preg-match.php –

Questions connexes