Regex kullanarak çapa etiketleri bozmadan PHP Arama Terimleri vurgulayın

3 Cevap php

Ben bir web sitesi ve bazı veritabanı arama sonuçları ile Arıyorum aranan terim eşleşen döndürülen sonuçları terimini vurgulamak için çalışıyor. Aşağıda (php) bugüne kadar ne var:

$highlight = trim($highlight);
if(preg_match('|\b(' . $highlight . ')\b|i', $str_content))
{
    $str_content = preg_replace('|\b(' . $highlight. ')(?!["\'])|i', "<span class=\"highlight\">$1</span>", 
    $str_break;
}

Bu yol gidiş dezavantajı benim arama terimi de url permalink gelirse, döndürülen sonuç href özniteliği içine yayılma yerleştirin ve çapa etiketi kıracak olmasıdır. Bir açılış ve kapanış HTML etiketi arasında görünür arama sonuçlarından "herhangi" bilgi dışlamak benim regex yine de var mı?

Ben strip_tags () işlevini kullanın ve sadece düz metin sonuçları tükürmek olabileceğini biliyorum, ama yoktu eğer ben değil bunu istemem.

3 Cevap

Ben şimdiye kadar, bu özel durum için iyi çalışır, bu yol, gidiş sona erdi.

<?php

if(preg_match('|\b(' . $term . ')\b|i', $str_content))
{
    $str_content = strip_tags($str_content);
    $str_content = preg_replace('|\b(' . $term . ')(?!["\'])|i', "<span class=\"highlight\">$1</span>", $str_content);
    $str_content = preg_replace('|\n[^<]+|', '</p><p>', $str_content);
    break;
}

?>

Hala html kodlanmış, ama bu html etiketleri olmadan artık ayrıştırmak kolay

DO NOT try to parse HTML with regular expressions:
http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags

Try something like PHP Simple HTML DOM.

<?php
// get DOM
$html = file_get_html('http://www.google.com/search?q=hello+kitty');

// ensure this is properly sanitized.
$term = trim($term);

// highlight $term in all <div class="result">...</div> elements
foreach($html->find('div.result') as $e){
   echo str_replace($term, '<span class="highlight">'.$term.'</span>', $e->plaintext);
}
?>

Ben HTML gibi görünüyor bilmiyorum, ama bu yolda bayağı yakın koymak gerekir, çünkü Note: Bu bir exact çözüm değildir.

Ben iddialar sizin aradığınız şey olduğunu düşünüyorum.