Foros del Web » Programando para Internet » PHP »

Duda con preg_replace (highlight)

Estas en el tema de Duda con preg_replace (highlight) en el foro de PHP en Foros del Web. Buenas, Hoy vengo a preguntar y no a responder. El tema es sencillo, pero se me ha atascado. Lo que quiero hacer es añadir a ...
  #1 (permalink)  
Antiguo 02/09/2011, 06:01
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años
Puntos: 253
Duda con preg_replace (highlight)

Buenas,

Hoy vengo a preguntar y no a responder. El tema es sencillo, pero se me ha atascado. Lo que quiero hacer es añadir a los resultados de una búsqueda que se resalte la palabra buscada (técnica conocida como highlight). Para ello, en la página de resultados de la búsqueda que rodear el texto con <span class="highlighted"></span>. El código es más o menos así:

Código PHP:
Ver original
  1. function HighlightedText($text, $search) {
  2.     return preg_replace('/' . strtolower($search) . '/i', '<span class="highlighted">' . $search . '</span>', $text);
  3. }

En $text tengo el texto en el que quiero reemplazar la palabra buscada (que está en $search) por la misma palabra, pero rodeada del <span>. Mi problema es de capitalización.

Si en el texto está la palabra CoMENtaRIo y el usuario en la búsqueda introduce comentario. Al imprimir el texto resaltado, me aparece resaltado, pero me aparece con la capitalización de la búsqueda, yo quiero conservar la que tenga el texto.

A ver si alguien me puede echar una mano, y no al cuello. Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #2 (permalink)  
Antiguo 02/09/2011, 06:12
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Duda con preg_replace (highlight)

Me perdí con lo que quieres hacer. Si por ejemplo tienes esta oración

Cita:
Lorem ipsum dolor sit amet, conSECtetUR adipiscing elit. Ut non dui odio. Sed hendrerit consequat leo, in tristique magna mollis ut.
Y yo quiero buscar consectetur ¿tú quieres que salga como? ¿Así?
Cita:
Lorem ipsum dolor sit amet, conSECtetUR adipiscing elit. Ut non dui odio. Sed hendrerit consequat leo, in tristique magna mollis ut.
¿o así?
Cita:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut non dui odio. Sed hendrerit consequat leo, in tristique magna mollis ut.
¿o así?
Cita:
Lorem ipsum dolor sit amet, CONSECTETUR adipiscing elit. Ut non dui odio. Sed hendrerit consequat leo, in tristique magna mollis ut.
Edito: Añado, no hace lógica que uses strtolower si la expresión regular le estás diciendo que sea case insensitive.

Ahhh ya caigo con lo que quieres hacer, es sencillo
Código PHP:
Ver original
  1. <?php
  2. function highlightedText($text, $search) {
  3.     return preg_replace('/(' . $search . ')/i', '<span class="highlighted">$1</span>', $text);
  4. }
  5.  
  6. $str = 'Lorem ipsum dolor sit amet, conSECtetUR adipiscing elit. Ut non dui odio. Sed hendrerit consequat leo, in tristique magna mollis ut.';
  7. echo highlightedText($str, 'consectetur'); // Imprime Lorem ipsum dolor sit amet, <span class="highlighted">conSECtetUR</span> adipiscing elit. Ut non dui odio. Sed hendrerit consequat leo, in tristique magna mollis ut.

Con eso logras el que te aparezca como está originalmente en el texto.

Te recomiendo esta lectura http://www.php.net/manual/en/regexp....ubpatterns.php
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos

Última edición por abimaelrc; 02/09/2011 a las 06:33
  #3 (permalink)  
Antiguo 02/09/2011, 07:54
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años
Puntos: 253
Respuesta: Duda con preg_replace (highlight)

Perfecto, si te digo la verdad de expresiones regulares sé lo justito (validación de campos y poco más). No sabía el tema de los paréntesis.

Pues muchas gracias, quedó solucionada la cosa y algo que aprendí.

PD: tienes razón con el strtolower, se me quedó ahí de unas pruebas anteriores.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?

Etiquetas: capitalización, expresiones, preg_replace, regulares
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:53.