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

0/5 (15 avis)

Snippet vu 8 672 fois - Téléchargée 20 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
cs_garfield90 Messages postés 388 Date d'inscription lundi 7 juillet 2003 Statut Webmaster Dernière intervention 10 février 2009
11 mai 2007 à 00:55
un simple :

$myTerm pouvant etre : un tableau d'expression rationnelle / une expression rationelle complexe
preg_replace($myTerm,'$0',$string) ;

je ne fais qu'une fois l'opération de mise en exergue (preg_replace), que toi tu le fais pour chaque terme ;)

perso, j'utiliserai plus la balise span avec une classe spécifique ce qui fait que pour changer le style, je modifie simplement mes CSS :)

a vérifier tout de meme car, j'ai fait ca a vu de nez
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
11 mai 2007 à 11:58
str_replace() !!! .. .

http://www.php.net/str_replace

==>

function autoformat($string, $word, $type = 'b')
{
return str_replace( $word , <'.$type.'>'.$word.'</'.$type.'>'$string);
}

pourquoi faire compliqué quand on peut faire simple... .. .

@ tchaOo°
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
11 mai 2007 à 11:59
Merde oublié une virgule... .. .

function autoformat($string, $word, $type = 'b')
{
return str_replace( $word , <'.$type.'>'.$word.'</'.$type.'>', $string);
}

@ tchaOo°
codefalse Messages postés 1123 Date d'inscription mardi 8 janvier 2002 Statut Modérateur Dernière intervention 21 avril 2009 1
11 mai 2007 à 12:48
a noter qu'un sera plus apprécié par les validateurs que le (bon, apres ca rajoute des conditions pour si c'est italique, gras, etc)
_klesk Messages postés 70 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 20 août 2008
11 mai 2007 à 13:43
a kankrelune :

Le probleme avec t'a methode c'est que ca marche pas :

Ma methode :
//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";

retourne : CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR

la tienne :
retroune : CM Sk 462 (AMD) - Asrock - K7NF2-RAID - SATA/DDR
rien

quand au balise je suis d'accord avec toutle monde, c'était m'a prochiane mise a jour

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.