Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2010, 11:26
nico1137
 
Fecha de Ingreso: octubre-2005
Mensajes: 1
Antigüedad: 18 años, 7 meses
Puntos: 0
Pregunta ¿Como buscar varias palabras dentro de un texto?

Hola, estoy un poco liado con esto.

Resulta que tengo un enorme array, digamos que de más de 10.000 elementos. Este contiene palabras. Ejemplo: "casa", "avion", "las ventanas", etc..


Lo que necesito es buscar dentro de un texto, por estas palabras y marcarlas en negrita. "<b>avion</b>"

He probado varias formas con preg_replace o str_ireplace, pero cuando recorro la lista de palabras con un forech digamos que los anteriores comandos no me funcionan.. Además la lista de palabras la obtengo de una base de datos en formato UTF-8.

ej:
defino y cargo $VEC como un array enorme que contiene palabras:

$texto ="La casa está cerca del avion.";
$resultado =""
foreach($VEC as $palabra) {
$resultado = eregi_replace($palabra, '<b>'.$palabra.'</b>', $texto );
}

//también he probado con str_ireplace de forma similar

foreach($VEC as $palabra) {
$resultado = str_ireplace($palabra, '<b>'.$palabra.'</b>', $texto );
}
Esto no me ha funcionado, simplemente no me encuentra nada. No obstante si yo busco:
$palabra = "avion";
$resultado = eregi_replace($palabra, '<b>'.$palabra.'</b>', $texto );
esto si me funciona. Noto que al entrar en el bucle del FOR no me responde.


Por otro lado y dada la cantidad importante de palabras por las que tengo que preguntar, estaba pensando si no sería posible hacer algo como esto:
$resultado = eregi_replace o str_ireplace($VEC, '<b>'.$VEC[elemento].'</b>', $texto );
Ósea que yo le pase el array completo y me busque y me remplace los elementos sin tener que entrar dentro de un bucle FOR.

Alguna sugerencia de porqué esto no me funciona. Quizás tenga algo que ver con que la lista de palabras que esta en UTF-8, aunque he probado en pasarla a otra codificación y tampoco. ($VEC[elemento] = trim(mb_convert_case($palabra_desde_bd, MB_CASE_LOWER, "UTF-8"));)

Muchas gracias