Metinde vurgulamak arama anahtar

4 Cevap

Ben bir metin parçası üzerinde arama anahtar kelimeleri vurgulamak için bu sınıf kullanıyorum:

    class highlight
    {
        public $output_text;

        function __construct($text, $words)
        {
            $split_words = explode( " " , $words );
            foreach ($split_words as $word)
            {
                $text = preg_replace("|($word)|Ui" ,
                           "<font style=\"background-color:yellow;\"><b>$1</b></font>" , $text );
            }
            $this->output_text = $text;
        }
    }

If $text = "Khalil, M., Paas, F., Johnson, T.E., Su, Y.K., and Payer, A.F. (2008.) Effects of Instructional Strategies Using Cross Sections on the Recognition of Anatomical Structures in Correlated CT and MR Images. <i>Anatomical Sciences Education, 1(2)</i>, 75-83 "

Zaten HTML etiketleri içeren ve benim arama bazı anahtar kelimeler hangi

$ Kelime = "Efektler renk"

Ilk göz <font style="background-color:yellow"> Etkisi </font> ile, kelime Etkileri vurgular, ancak ikinci döngü HTML etiketi kelime rengi vurgular. Ben ne yapmalıyım?

O zaman yalnızca metni vurgulamak için preg_replace söylemek mümkün mü onun değil bir timsah dirsek iç?

4 Cevap

Eğer sadece metin arama emin olmak için HTML parser kullanın.

Bunun yerine CSS vurgulanan sınıfını kullanın ve sonra span etiketleri, örneğin kullanabilirsiniz.

<span class="highlighted">word</span>

Sonra CSS vurgulanan sınıf tanımlamak. Daha sonra kelime arama geçerli olmaktan 'vurgulanan' dışarıda olabilir. Tabii ki karanlık bir şey sınıf yeniden adlandırma yardımcı olacaktır.

Bu aynı zamanda ileride kolayca vurgu rengini değiştirmek, ya da gerçekten kullanıcı CSS değiştirerek açık ve kapalı geçiş yapmak için izin için izin yararı vardır.

Neden bir döngü kullanmak?

    function __construct($text, $words) 
    { 
        $split_words = preg_replace("\s+", "|", $words); 
        $this->output_text = preg_replace("/($split_words)/i" , 
         "<font style=\"background-color:yellow; font-weight:bold;\">$1</font>" , $text ); 
    } 

Olası bir iş çevresinde birinci (% 99) bir arama girişi olacak ve 'foreach' döngü sonra html etiketleri ile bu karakterleri değiştirmek olmaz karakterler ile sarın olacaktır:

class highlight
{
    public $output_text;

    function __construct($text, $words)
    {
        $split_words = explode(" ", $words);
        foreach ($split_words as $word)
        {
            $text = preg_replace("|($word)|Ui", "%$1~", $text);
        }

        $text = str_replace("~", "</b></span>", str_replace("%", "<span style='background-color:yellow;'><b>", $text));
        $this->output_text = $text;
    }
}