Accueil > > > AFFICHAGE RESULTATS RECHERCHE TYPE GOOGLE
AFFICHAGE RESULTATS RECHERCHE TYPE GOOGLE
Information sur la source
Description
Salut à tous ! Pour ma 1ere contribution sur PHPCS, je poste ici cette fonction que j'ai codée pour un besoin bien précis : afficher PROPREMENT (visuellement) des résultats de recherches en grand nombre. L'idée est de s'inspirer de Google, qui, d'une part centre les phrases de ses résultats autour du mot clé recherché, mais en plus le met en gras, pour une visibilité optimale. Par ex, pour une recherche sur "PHP", on aura : ---------------------------- PHPCS.com | PHP CodeS SourceS | 3011 sources PHP, Source, Code ...- 01:35 Beaucoup de Codes Sources pour (gras)PHP(/gras), Scripts, Script, Sources, Codes, France, Francais, French. www.phpcs.com/ --------------------------- - Bref, sur un texte de 1000 mots ou plus, comment faire pareil ? Ca semble simple au 1er abord, mais cela nécessite un peu de code, que voici... J'ai réalisé ce code car je n'ai pas trouvé cette fonction sur ce site, ni sur le net ;) Une parenthèse pour dire que mon code est optimisable, et d'ailleurs j'essaierai de le mettre à jour lorsque je ferai des modifs.
Source
- function Aff_Search_Results($text, $mot, $LimMax, $LimDown, $ponct = "...")
-
-
- {
-
-
- ///////////// TRAITEMENT DU TEXTE /////////////////
-
-
- $chaine = htmlspecialchars_decode($text); // on commence à traiter le texte, en convertissant le code html
-
- $chaine = ereg_replace('<[^>]*>', ' ', $chaine); // On vire ensuite les balises html, mais on les remplace par un espace;
- // Au contraire, avec strip_tags, par ex pour un <li>, on aurait 2 mot colés
-
- $motNoUSe = strtolower($mot); // On met le terme de la recherche en minuscules afin de ne pas avoir de mauvaise surprise
-
- $chaineNoUse = strtolower($chaine); // On met la chaine au même niveau
-
-
-
- ///////////// RECHERCHE DES TERMES /////////////////
-
- $pos = strpos($chaineNoUse, $motNoUSe, 1); // Donne la position du terme recherché, mais dans la chaine en minuscules
-
- $min = $pos - $LimDown; // NB limite pour la phrase à x caractères AVANT le mot recherché
-
-
- if ($min <= 0 ) // Si le mini est négatif, cela nous ferait partir de la fin; il faut donc le mettre à 0
-
- {
-
- $min = 0 ;
-
- }
-
-
- $chaine = substr($chaine, $min, $LimMax); // chaine temporaire coupée, mais peut etre au milieu d'un mot !
-
- $chaineNoUse = substr($chaineNoUse, $min, $LimMax); // Cette chaine est en minuscules, et nous servira UNIQUEMENT pour le calcul plus loin
-
-
-
- $espace = strrpos($chaine, ' '); // Repérage du dernier espace de la chaine tronquée
-
- $chaineFinale = substr($chaine, '0', $espace); // Chaine finale, retaillée un peu A LA FIN pour tomber sur un espace
-
-
- if ($min != 0) { // si on ne commence pas la phrase par le début de la chaine, car sinon on couperai le 1er mot !
-
- $chaineFinale = strstr($chaineFinale, ' '); // Traitement DU DEBUT de la chaine, pour tomber sur un espace
-
- }
-
-
-
- ///////////// VERIF DE LA PHRASE /////////////////
-
-
- $long = strlen($chaineNoUse); // Longeur de la chaine après coupure;
- //on part de la chaine non tronquée pour ne pas fausser le résultat ensuite
-
-
- $Ppos = strpos($chaineNoUse, $motNoUSe, 1); // Donne la position du mot dans la chaine finale
-
-
- $Mmax = $long - $Ppos; // On calcule ce qui reste après le mot recherché
-
-
-
-
- ///////////// SURLIGNAGE DES TERMES /////////////////
-
- // Solution N#1 pour le surlignage du mot : c'est plus propre, MAIS ne surligne pas les termes contenus dans un mot
- //(ex : le mot "orange" ne sera pas trouvé dans "orangeade"
- // A vous d'activer l'une ou l'autre selon votre besoin !!! ;)
- //$chaineFinale = preg_replace('#\b' .$mot. '\b#i', '<span class="surligne">\0</span>', $chaineFinale);
-
-
-
- // Solution #2, moins propre mais qui correspond à ce que je veux faire ici !
- // Note : j'utilise ici str_ireplace car il est insensible à la casse
- // Par contre gros défaut : si le mot recherché est en minuscules, il sera affiché en minuscules dans le texte final
- // J'utilise donc un strtoupper afin qu'il soit tjs en majuscules, histoire d'améliorer la visibilité
-
- $motMaj = strtoupper($mot);
-
- $chaineFinale = str_ireplace($mot, '<span class="surligne">'.$motMaj.'</span>', $chaineFinale);// on situe le mot recherché dans le texte et on le surligne
-
-
-
-
-
- ///////////// AFFICHAGE DU RESULTAT /////////////////
-
- if ($Ppos < ($LimMax - $LimDown)) { // Si la partie AVANT le terme recherché est plus petite que le max autorisé
-
- print $chaineFinale.' '.$ponct; // Chaine sans mini
-
- } elseif ($Mmax < $LimDown) { // Même chose mais avec la partie APRES
-
- print $ponct.' '.$chaineFinale; // Chaine sans maxi
-
- } else { // Sinon on est au milieu d'un phrase, on met la ponctuation au début ET a la fin
-
- print $ponct.' '.$chaineFinale.' '.$ponct; // Chaine complete
-
- }
-
-
- } // fin de la fonction
function Aff_Search_Results($text, $mot, $LimMax, $LimDown, $ponct = "...")
{
///////////// TRAITEMENT DU TEXTE /////////////////
$chaine = htmlspecialchars_decode($text); // on commence à traiter le texte, en convertissant le code html
$chaine = ereg_replace('<[^>]*>', ' ', $chaine); // On vire ensuite les balises html, mais on les remplace par un espace;
// Au contraire, avec strip_tags, par ex pour un <li>, on aurait 2 mot colés
$motNoUSe = strtolower($mot); // On met le terme de la recherche en minuscules afin de ne pas avoir de mauvaise surprise
$chaineNoUse = strtolower($chaine); // On met la chaine au même niveau
///////////// RECHERCHE DES TERMES /////////////////
$pos = strpos($chaineNoUse, $motNoUSe, 1); // Donne la position du terme recherché, mais dans la chaine en minuscules
$min = $pos - $LimDown; // NB limite pour la phrase à x caractères AVANT le mot recherché
if ($min <= 0 ) // Si le mini est négatif, cela nous ferait partir de la fin; il faut donc le mettre à 0
{
$min = 0 ;
}
$chaine = substr($chaine, $min, $LimMax); // chaine temporaire coupée, mais peut etre au milieu d'un mot !
$chaineNoUse = substr($chaineNoUse, $min, $LimMax); // Cette chaine est en minuscules, et nous servira UNIQUEMENT pour le calcul plus loin
$espace = strrpos($chaine, ' '); // Repérage du dernier espace de la chaine tronquée
$chaineFinale = substr($chaine, '0', $espace); // Chaine finale, retaillée un peu A LA FIN pour tomber sur un espace
if ($min != 0) { // si on ne commence pas la phrase par le début de la chaine, car sinon on couperai le 1er mot !
$chaineFinale = strstr($chaineFinale, ' '); // Traitement DU DEBUT de la chaine, pour tomber sur un espace
}
///////////// VERIF DE LA PHRASE /////////////////
$long = strlen($chaineNoUse); // Longeur de la chaine après coupure;
//on part de la chaine non tronquée pour ne pas fausser le résultat ensuite
$Ppos = strpos($chaineNoUse, $motNoUSe, 1); // Donne la position du mot dans la chaine finale
$Mmax = $long - $Ppos; // On calcule ce qui reste après le mot recherché
///////////// SURLIGNAGE DES TERMES /////////////////
// Solution N#1 pour le surlignage du mot : c'est plus propre, MAIS ne surligne pas les termes contenus dans un mot
//(ex : le mot "orange" ne sera pas trouvé dans "orangeade"
// A vous d'activer l'une ou l'autre selon votre besoin !!! ;)
//$chaineFinale = preg_replace('#\b' .$mot. '\b#i', '<span class="surligne">\0</span>', $chaineFinale);
// Solution #2, moins propre mais qui correspond à ce que je veux faire ici !
// Note : j'utilise ici str_ireplace car il est insensible à la casse
// Par contre gros défaut : si le mot recherché est en minuscules, il sera affiché en minuscules dans le texte final
// J'utilise donc un strtoupper afin qu'il soit tjs en majuscules, histoire d'améliorer la visibilité
$motMaj = strtoupper($mot);
$chaineFinale = str_ireplace($mot, '<span class="surligne">'.$motMaj.'</span>', $chaineFinale);// on situe le mot recherché dans le texte et on le surligne
///////////// AFFICHAGE DU RESULTAT /////////////////
if ($Ppos < ($LimMax - $LimDown)) { // Si la partie AVANT le terme recherché est plus petite que le max autorisé
print $chaineFinale.' '.$ponct; // Chaine sans mini
} elseif ($Mmax < $LimDown) { // Même chose mais avec la partie APRES
print $ponct.' '.$chaineFinale; // Chaine sans maxi
} else { // Sinon on est au milieu d'un phrase, on met la ponctuation au début ET a la fin
print $ponct.' '.$chaineFinale.' '.$ponct; // Chaine complete
}
} // fin de la fonction
Conclusion
En conclusion, sur un texte comme celui-ci (en anglais, dsl):
The LHC will produce head-on collisions between two beams of particles of the same kind, either protons or lead ions. The beams will be created in CERN’s existing chain of accelerators and then injected into the LHC, where they will travel through a vacuum comparable to outer space. Superconducting magnets operating at extremely low temperatures will guide the beams around the ring. Each beam will consist of nearly 3000 bunches of particles and each bunch will contain as many as 100 billion particles. The particles are so tiny that the chance of any two colliding is very small. When the bunches cross, there will be only about 20 collisions among 200 billion particles. However, bunches will cross about 30 million times per second, so the LHC will generate up to 600 million collisions per second.
Avec le mot clé "guide", vous aurez ce type de résultats (limitation à env 300 mots):
... the LHC, where they will travel through a vacuum comparable to outer space. Superconducting magnets operating at extremely low temperatures will (surligné)GUIDE(/surligné) the beams around the ring. Each beam will consist of nearly 3000 bunches of particles and each bunch will contain as many as 100 ...
Voici un lien pour voir le résultat (tjs en anglais) : http://www.gridguide.org/search3.php Autre lien incluant une recherche : http://www.gridguide.org/search.php?search1=egee&x =0&y=0
Enfin, remarque importante pour les débutants (si ca peut aider), pour vos recherches, pensez à sécurisez votre formulaire avec, au minimum "mysql_real_escape_string", contre les injections SQL. Et pour la méthode de recherche, je vous conseille FULLTEXT...
Historique
- 17 mars 2009 11:59:39 :
- Lien vers un exemple
- 17 mars 2009 12:28:28 :
- Autre exemple
- 17 mars 2009 16:33:04 :
- Modif de présentation
- 19 mars 2009 16:18:41 :
- Modif du lien exemple qui a changé
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Url bizarre ou...? [ par MAsterC ]
Salut à tous!J'aimerai avoir une explication sur le URL de Google...http://www.google.ca/search?q=googlePourquoi, le fichier "search" n
php et google ... ? [ par michelvernet2 ]
bonjour,pour éviter un PB de session avec aol, je force la session dans l'adresse, voir : www.nouveauxobjets.com . Pour ceux qui ont la google barre,
referencement google et PHP [ par michelvernet2 ]
bonjour,pour éviter un PB de session avec aol, je force la session dans l'adresse, voir : www.nouveauxobjets.com . Pour ceux qui ont la google barre,
ouvir page [ par xa4ke ]
voila je voulais savoir comment en php je pouvais metter en cliquant sur un lien par ex " google "que une nouvelle page s affiche a la place que l
envoi de variables préfabriquées vers un script JS? [ par johanb ]
bonjour à tous,j'ai quelques problêmes à faire communiquer php et javascript.je voudrais créer un script semblable à celui de
Aidez moi je cherche à realiser un report avec l'adwords google api [ par amellouki ]
Je desire realiser un report avec l'adwords google api avec toute les campagnes et leurs mots clés. J'utilise nusoap et php.aidez moi!!!Si quelqu
Google ? [ par deathshade ]
est-il possible de faire une recher sur google avec notre propre formulaire (oui ! lolol) mais esse-que ont peut apres avoir fait notre recherch
Google Print : OCR [ par GRenard ]
Yo tout le monde, vous avez vu la sorti de google print ? (http://print.google.com) sorti hier (ou avant hier pour certains). Si vous regardez, vous p
Google AdSense (réécriture) [ par motherboy ]
Hello tout l'monde,J'ai un petit projet, qui me semble compliqué en PHP.J'aimerai donc, recupéré le JavaScript de Google AdSense, et le
problème moteur de recherche [ par tony4758 ]
Bonjour, j'ai crée un moeur de recherche très simple avec base de donnée. Voici la structure de ma base :CREATE TABLE sonarty_search (i
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|