arama birden fazla anahtar kelime vurgulamak

5 Cevap php

Ben arama anahtar sözcükleri vurgulamak için bu kodu kullanıyorum:

function highlightWords($string, $word)
 {

        $string = str_replace($word, "<span class='highlight'>".$word."</span>", $string);
    /*** return the highlighted string ***/
    return $string;

 }

 ....

  $cQuote =  highlightWords(htmlspecialchars($row['cQuotes']), $search_result);

Ancak, bu sadece bir anahtar kelimeyi vurgular. Kullanıcı birden fazla anahtar kelime girerse, bu arama daraltmak olacaktır ama hiçbir sözcük vurgulanır. nasıl ben birden fazla kelime vurgulamak?

5 Cevap

düzenli ifadeler gitmek için bir yoldur!

function highlight($text, $words) {
    preg_match_all('~\w+~', $words, $m);
    if(!$m)
        return $text;
    $re = '~\\b(' . implode('|', $m[0]) . ')\\b~';
    return preg_replace($re, '<b>$0</b>', $text);
}

$text = '
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat.
';

$words = 'ipsum labore';

print highlight($text, $words);

Bir harf duyarsız bir şekilde eşleştirmek için, düzenli ifade 'i' eklemek

    $re = '~\\b(' . implode('|', $m[0]) . ')\\b~i';

NB: "ä" gibi non-enlish mektuplar için sonuçlar yerele bağlı olarak değişebilir.

Sözler sadece patlayabilir kullanabileceğiniz bir boşluk ayrılmış dize Girilen varsayarsak

$words = explode(' ', $term);

Birden fazla boşluk yok sağlamak istiyorsanız, ilk dizeden kaldırmak isteyebilirsiniz rağmen

$term = preg_replace('/\s+/', ' ', trim($term));
$words = explode(' ', $term);

Daha sonra yedek dizi oluşturmak zorunda

$highlighted = array();
foreach ( $words as $word ){
    $highlighted[] = "<span class='highlight'>".$word."</span>"
}

O zaman

str_replace($words, $highlighted, $string);

Bu yüzden togther koyarak

function highlightWords($string, $term){
    $term = preg_replace('/\s+/', ' ', trim($term));
    $words = explode(' ', $term);

    $highlighted = array();
    foreach ( $words as $word ){
        $highlighted[] = "<span class='highlight'>".$word."</span>"
    }

    return str_replace($words, $highlighted, $string);
}

Burada sadece maç metni vurgulamak için basit bir fonksiyonudur.

function highlighter_text($text, $words)
{
    $split_words = explode( " " , $words );
    foreach($split_words as $word)
    {
        $color = "#e5e5e5";
        $text = preg_replace("|($word)|Ui" ,
            "<span style=\"background:".$color.";\"><b>$1</b></span>" , $text );
    }
    return $text;
}

işlevini çağırın

Yukarı kelimelerle arama sorgusu böler, daha sonra ayrı ayrı sözcükleri vurgulamak.

Bu olsa javascript vurgulamasını gerçekleştirmek için daha iyi çalışmak olabilir. jQuery seçici muhtemelen gitmek gibi biçimlendirme öğeleri yerine sorunları önlemek yardımcı olacaktır "içeriyor" ...

http://api.jquery.com/contains-selector/

user187291 tarafından önerilen, sadece sarı arka vurgulanan metni almak için aşağıdaki kodu değiştirin.

 return preg_replace($re, '<SPAN style="BACKGROUND-COLOR: #ffff00"><b>$0</b></SPAN>', $text);