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
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBERÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE Le code est simple, il permet depuis une url youtube de récupérer son identifiant et de se connecter au serveur de miniatures pour en récupérer les im...
par tefa24600
CONVERTISSEUR DE NOMBRES EN TEXTECONVERTISSEUR DE NOMBRES EN TEXTEQu'est-ce ? Un convertisseur de nombre en texte.
Ses particularités?
- pas de limitation sur la taille du nombre (traitement en string, et non en ...
par macruz
CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECe script php permet, comme son nom l'indique de coder un texte pour remplacer les caractères spéciaux, ou apprendre à comprendre les htmlentities, sp...
par Salva9473
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
MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|