Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

144
Vistas
Resaltar un término de búsqueda acentuado usando preg_replace

He estado tratando de poner en negrita un término de búsqueda en una oración. Si la oración es Engliš is spoken wörldwide. Si mi término de búsqueda es spoken world , quiero que Engliš is <b>spoken wörld</b>wide.

He usado esta función:

 function highlightWords($text, $searchTerm){ $corr = ['a' => '[aäâ]', 'o' => '[oöòóôõ]', 'c' => '[cç]', 's' => '[şśšșŝ]', 'y' => '[ýÿŷȳy]', 'o' => '[ôöòóøōoõ]', 'n' => '[ñńňn]', 'u' => '[üu]']; $key = preg_quote($searchTerm); $pattern = '/' . strtr($key, $corr) . '/iu'; $text = preg_replace($pattern, '<b>$0</b>', $text); return $text; }

Se supone que funciona, pero tengo un comportamiento realmente extraño. Algunos ejemplos son:

El texto es Sygmaý çykdy deşdi-sähra düzünden (perdón por la extraña oración). Cuando $searchTerm es duz , funciona perfectamente, obtengo Sygmaý çykdy deşdi-sähra <b>düz</b>ünden . Si cambio el término de búsqueda a sahra , la función devuelve simplemente Sygmaý çykdy deşdi-sähra düzünden .

Funciona con cykdy y çykdy .

Pero no funciona ni con sygmay ni con sygmaý . Pero trabaja con Sygmaý con mayúscula.

¿Qué debo corregir para obtener el término de búsqueda resaltado en todos los escenarios?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay un par de problemas en la función, específicamente en la matriz $corr .

Primero, hay dos secciones "o" y son diferentes. Esos necesitan ser combinados. En segundo lugar, la letra sin acento debe estar en la matriz de cada letra. s no tiene esto, la "s" que falta es lo que está causando esta falla en particular.

Función fija:

 function highlightWords($text, $searchTerm) { $corr = [ 'a' => '[aäâ]', 'o' => '[oöòóôõøō]', 'c' => '[cç]', 's' => '[sşśšșŝ]', 'y' => '[yýÿŷȳ]', 'n' => '[nñńň]', 'u' => '[uü]' ]; $key = preg_quote($searchTerm); $pattern = '/' . strtr($key, $corr) . '/iu'; $text = preg_replace($pattern, '<b>$0</b>', $text); return $text; } $input = 'Sygmaý çykdy deşdi-sähra düzünden'; $term = 'sahra'; $expected = 'Sygmaý çykdy deşdi-<b>sähra</b> düzünden'; $highlighted = highlightWords($input, $term); assert($highlighted == $expected, 'Term should be marked bold'); echo $highlighted . PHP_EOL;
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda