paul a écrit :
> C'est possible ça ?
> Merci pour l'aide
Attention, la solution que je vais te proposer est très bourrin, ça
peut éventuellement consommer beaucoup de mémoire. L'astuce consisterait
à utiliser un parser de HTML/XML : DOMDocument
<http://fr2.php.net/manual/fr/ref.dom.php> avec DOMXpath
<http://fr2.php.net/manual/fr/function.dom-domxpath-construct.php>, puis
en traitant les résultant de la requête avec preg_match.
Par exemple, pas testé et fait de tête (j'vais pas tout faire non plus
:p) :
<?php
$word = 'toto' ;
$doc = DOMDocument::loadHTML($output) ;
$doc->validate() ;
$finder = new DOMXPath('//text()') ;
foreach($finder as $textNode)
{
// L'expression régulière ci-dessous ne détectera que la première
occurrence du mot $word.
if(preg_match('`^(.*)\b('.$word.')\b(.*)$`', $textNode.value, $matches))
{
$hlSpan = $doc->createElement('span', $word) ;
$hlSpan->setAttribute('class', 'highlight') ;
$beforeNode = $textNode.ownderDocument.createTextNode($matches[1]) ;
$afterNode = $textNode.ownderDocument.createTextNode($matches[3]) ;
$textNode.parentNode.appendChild($beforeText) ;
$textNode.parentNode.appendChild($hlSpan) ;
$textNode.parentNode.appendChild($afterText) ;
$textNode.parentNode.removeChild($textNode) ;
}
}
echo $doc->saveHTML() ;
?>
Les remarques sur ma façon de coder sont les bienvenues, ou sur des
erreurs aussi.
Bon début de semaine à tous !
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org