Coloration d'un mot clef dans un texte et coupure au premier espace

Eléphanteau du PHP | 25 Messages

03 avr. 2017, 16:03

Bonjour,

J'ai récupéré ce bout de code qui me permet d'afficher une description d'un gros texte par la gauche ou par la droite. Jusqu'ici, tout fonctionne. (enfin presque)

Je n'arrive pas à incorporer une colloration des mots clefs ($keywordsy), soit une mise en gras dès que le mots clefs est trouvé dans la description

Disons que si la recherche est "pomm" qu'il me mette en gras pour une telle description : "une pomme poser sur le pommeau de ma boite de vitesse etc..."

Après, la coupure de la description (à 320 caractères) ne se fait pas sur le premier espace trouvé à ~320 caractère mais directement au 320ème caractère, donc un mot est régulièrement coupé avant les .. pourtant il devrait non ?

<?php

	$nul = strlen($description);  
				
			// <!-- solution de secours si description vide -->
			if ($nul <=50)	
			{ 
	
					$pos = stripos($texte, $keywordsy); // insensible à la casse, sinon strpos
						
						if ($pos === false) 
						{
							$decription = "$description";
						} 
						else 
						{
							$description = "$texte";
						}
    
					$texte = str_replace(array("\r\n", "\n", "\n\r"), ' ', $texte);

					$y = stripos($texte, $keywordsy);
					
						if ($y <= 320)
						{
							$r = substr($texte, 0, $y);
						}
						else
						{
							
			// <!-- Par la gauche -->
							$lim = -320;
							while (substr($texte, $y + $lim--, 1) !== ' ') // coupure sur le premier espace trouvé
								{
								continue;
								}
							
							$r  = substr($texte, $y + $lim + 2, abs($lim) - 2);
						}
 							$start = $y + strlen($keywordsy);
							
 						if (($start + 320) >= strlen($texte))
						{
							$r .= substr($texte, $y);
						}
						else
						{
							
    		// <!-- Par la droite -->
							$lim = 320;
							while (substr($texte, $start + $lim++, 1) !== ' ')
							{
								continue;
							}
								$r .= substr($texte, $y, --$lim + strlen($keywordsy));
						}
					$description ="$r";
					$description ="$description ..";
			}

?>
Merci pour votre aide
Yule

Eléphanteau du PHP | 25 Messages

03 avr. 2017, 19:27

Pour la coupure c'est bon... mais j'ai toujours pas trouvé pour la coloration

$nul = strlen($description);  
				
			// <!-- solution de secours si description vide -->
			if ($nul <=50)	
			{ 
	
					//$pos = stripos($texte, $keywordsy); // insensible à la casse, sinon strpos
						
						if ($pos === false) 
						{
							$decription = "$description";
						} 
						else 
						{
							$description = "$texte";
						}
					
					$texte = str_replace(array("\r\n", "\n", "\n\r"), ' ', $texte);

					$y = stripos($texte, $keywordsy);
					
						if ($y <= 320)
						{
							$r = substr($texte, 0, $y);
						}
						else
						{
			// <!-- Par la gauche -->
							$lim = -320;
							while (substr($texte, $y + $lim--, 1) !== ' ') // coupure sur le premier espace trouvé
								{
								continue;
								}
							
							$r  = substr($texte, $y + $lim + 2, abs($lim) - 2);
						}
 							$start = $y + strlen($keywordsy);
							
 						if (($start + 320) >= strlen($texte))
						{
							$r .= substr($texte, $y);
						}
						else
						{
    		// <!-- Par la droite -->
							$lim = 320;
							while (substr($texte, $start + $lim++, 1) !== ' ')
							{
								continue;
							}
								$r .= substr($texte, $y, --$lim + strlen($keywordsy));
						}
					$description ="$r";

						if (strlen($description) > $lim) 
						{ 
						$description = substr($description, 0, $lim); 
						$last_space = strrpos($description, " ");  
						$description = substr($description, 0, $last_space)."..."; 
	
						} 
			}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

04 avr. 2017, 09:04

Bonjour,

Si ton contenu n'est que du texte, un simple str_replace() devrait faire l'affaire pour la mise en gras non ?
Quand tout le reste a échoué, lisez le mode d'emploi...