PHP: Arama-gibi kelime vurgulama

2 Cevap php

Ben bir gazete uygulaması için basit bir arama motoru üzerinde çalışıyorum. Kullanıcı türleri bir anahtar kelime, bir sonuç sayfasında gösterildiği zaman, bir renk ile dönem vurgulayarak.

Şu anda bu yapıyorum:

$title = str_ireplace($term, "<span class='highlight'>$term</span>", $note->Title);

Büyük, str_ireplace() harf duyarsız arama yapar, ancak dava notu eşleşmiyor zaman (yani kullanıcı "PARA" arar ve notu "para" diyor), bu olur:

malvinas | Resultados de la búsqueda

   1. malvinas: Argentina va a la ONU y Londres se enfurece » en Actualidad  
      [...] Naciones Unidas, Ban-Ki Moon, ante quien reiterará que se cumplan las
resoluciones de la ONU sobre el tema de la soberanía de las Islas [...] 

(:, Vs değil "Malvinas"): notun orijinal adı "Arjantin va a la ONU y Londra se enfurece Malvinas" dir

Ben orijinal kelimenin durumda değiştirmeden bir vurgulamak nasıl yapabilirim?

2 Cevap

Regex kullanın:

$term = 'hello';
$str = 'Hello there';
$term_escaped = preg_quote($term);
$out = preg_replace("~$term_escaped~i", '<b>\0</b>', $str);

echo $out;

Çıktı:

<b>Hello</b> there

Bir harf duyarsız değiştirici ile, backreferences kullanmalısınız. Eğer kelimeyi değiştirmek zaman, ne olursa olsun kasa ile değiştirerek (onun davasını sürdürmek) değil, kendisi ile değiştiriyorsanız bu şekilde bu arama kullanılan oldu.

Bu yöntemi kullanarak preg_replace Eğer arama terimleri bir dizi geçmek ve her biri için bir genel yedek-desen sağlayacaktır.