dj,
revise la funcion y era una pavada, no tuve en cuenta que si alguna de las palabras aparece en el primer espacio (offset 0), no iba a entrar al while nunca, asi que cambie la condicion del while, la funcion queda asi:
Código PHP:
function resaltar_palabras($texto, $palabras)
{
// en $texto viene el texto original
// en $palabras viene el "criterio de busqueda"
// pasamos todo a mayusculas, pero en variables auxiliares
$textoM = strtoupper($texto);
$palabrasM = strtoupper($palabras);
// voy a trabajar sobre esta otra variable
$textoS = $texto;
// armo un array con las palabras
$lista_palabras = explode(" ",$palabrasM);
// recorro el array de palabras
foreach($lista_palabras as $palabra)
{
// ahora reocrro el texto
while(!(($pos = strpos($textoM, $palabra)) === false))
{
$len = strlen($palabra);
// reemplazo en ambos strings, para mantener una relacion de tamaño en ambos
$textoS = substr($textoS, 0, $pos)."<font color='#ff0000'>".substr($textoS, $pos, $len)."</font>".substr($textoS, ($pos+$len));
// en el estring auxiliar reemplazamos por blancos, para no entrar en un loop infernal
$textoM = substr($textoM, 0, $pos)."<font color='#ff0000'>".str_pad(" ", $len, " ")."</font>".substr($textoM, ($pos+$len));
}
}
return $textoS;
}
habria que ver el tema de que si buscas "aguja" matchee "agúja", y casos similares de acentos y enies, pero como te dije antes, con hacer un par de str_replace en $palabrasM y en $textoM, antes de hacer el explode se tendria que solucionar el asunto.
saludos,
chubu