Formatage automatique d'un text en fonction de mots clées

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 231 fois - Téléchargée 18 fois

Contenu du snippet

Je cherchais depuis quelque temps un script me permettant de souligner, ou mettre en gras certain mot dans une chaîne de caractères, n'ayant pas trouver mon bonheur je m'y suis mis tout seul ;).

Ceci est ma première contribution, tout commentaires sera le bienvenu.

Source / Exemple :


<?
/*-----------------------------------*/
/*Fonction de formatage de caratères */
/*Par Klesk 11/05/2007               */
/* v1.0                              */
/* Merci de laisser ce commentaire   */
/*-----------------------------------*/

function autoformat($string, $word, $type="b")
	{
		//on sépare les mots clées
                $tab1 = explode(' ',$word);
		foreach($tab1 as $k => $v)
			{
                                //pour chaques mots clées on remplace par le formatage choisi
				$w[] = '<'.$type.'>'.$v.'</'.$type.'>';
				$string = eregi_replace($tab1[$k], $w[$k], $string);
			}
		return $string;
	}

?>

  • /----------------------*/
  • /Version de kankrelune */
  • /inssensible a la casse*/
  • /Merci a lui */
  • /----------------------*/
<? function kankrelune_autoformat($string, $word, $style = 'font-weight:bold;') { if(is_array($word)) { $i = -1; while(isset($word[++$i])) $word[$i] = '~('.preg_quote($word[$i],'~').')~i'; } else $word = '~('.preg_quote($word,'~').')~i'; return preg_replace( $word , '<span style="'.$style.'">$1</span>', $string); } ?>

Conclusion :


//chaîne de caractères
$a = "CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR";
//mot clées séparé par un espace
$b ="CM 462 Asrock";

//affichage du résultat
echo autoformat($a,$b).'<br/>';

bug connus : ne gère pas la casse à l'affichage, mais en tient compte lors du traitement.

j'y travail, toute contribution sera la bienvenue.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
70
Date d'inscription
jeudi 14 avril 2005
Statut
Membre
Dernière intervention
20 août 2008

impec merci kankrelune ca marche au poil.
j'ai pas tout compris mais je vais decortiquer tous ça.

si tu le permet je rajoute t'a version.
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
ok, je ne connaissais pas la fonction preg_quote .. en effet elle est tres utile :)
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
Autant pour moi a propos de php4 :/ :p

Une méthode peut-être un peu bourine, serait de :
_ Sauvegarder ta chaine dans une variable
_ faire le ereg replace sur ta chaine mise et des mot à remplacer le tout en miniscule
_ puis explode la variable de la chaine d'origine
_ et tu remplace tout les termes retournés de la fonction d'origine, mis en miniature, par les mêmes valeurs, mais avec la casse d'origine.
_ tu retourne le tout

Ne connaissant pas de fonction directe qui peux remplacer en étant insensible à la casse et en gardant la casse d'origine, c'est comme ca que je le verrai. Apres, ya ptete mieux (et vu comme c'est assez lourd je trouve, il doit y avoir mieux) ... mais c'est une solution ! :)
Messages postés
1293
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015

Oui c'est clair... mais fallait le préciser... dans ce cas là si tu est sous php4 utilise plutot les expressions regulières... du genre... .. .

function autoformat($string, $word, $style = 'font-weight:bold;')
{
if(is_array($word))
{
$i = -1;

while(isset($word[++$i]))
$word[$i] = '~('.preg_quote($word[$i],'~').')~i';
}
else $word = '~('.preg_quote($word,'~').')~i';

return preg_replace( $word , '$1', $string);
}

@ tchaOo°
Messages postés
70
Date d'inscription
jeudi 14 avril 2005
Statut
Membre
Dernière intervention
20 août 2008

merci codefalse mais str_ireplace est dispo sous >PHP5 or je suis en PHP4 (et c'est pas possible de changer).

Non ce que je voulait c'est : dans ce cas, j'ai "CM", dans mon systeme de recherche je tape "cm" (avec eregi_replace, ca marche ;) ) alors j'ai bien "cm" en gras, mais en minuscule alors que dans la chaine d'origine il était en majuscule.

Je voudrait donc que lors de ma recherche il s'affiche tel qu'il etait dans la chaine même si mon mot clée est en minuscule.

Suis-je clair ??
Afficher les 15 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.