А есть что-то вроде этого. Это прекрасно работает, но я пробовал 2 часа, чтобы сократить результат поиска — 100 строк до $ word и 100 после.
Как я могу сделать это?
$word = $_POST["search"];
$sql_events = mysql_query("SELECT * FROM events WHERE event_title LIKE '%" . $word . "%' OR event_desc LIKE '%" . $word ."%'");
function highlightWords($content, $word){
if(is_array($search)){
foreach ( $search as $word ){
$content = str_ireplace($word1, '<span>'.$word1.'</span>', $content);
}
} else {
$content = str_ireplace($word, '<span>'.$word.'</span>', $content);
}
return $content;
}
while($row = mysql_fetch_array($sql_events)){
$content = $row["event_desc"];
$result = highlightWords($content, $word);
echo '<li>
<H3><a href="">'.$row['event_title'].'</a></H3>
<div class="text">'.$result .'...</div>
</li>';
}
Вам нужно это регулярное выражение:
[\d\D]{0,100}word[\d\D]{0,100}
куда word
это главное слово :). Вот это реализовано с вашим кодом:
$content = $row["event_desc"];
$word_in_regexp = quotemeta($content);
preg_match("/[\d\D]{0,100}$word_in_regexp[\d\D]{0,100}/i", $content, $matches);
$content = $matches[0];
Мы используем quotemeta()
в случае $content
содержит символы, такие как [
, (
, \
и т.п.
$wordpos1 = (mb_strpos($content, $word) - 100);
if ($wordpos1 < 0){
$wordpos1 = 0;
} else {
$wordpos1 = (mb_strpos($content, $word) - 100);
}
$wordpos2 = (mb_strpos($content, $word) + 400);
$resText = mb_substr($content, $wordpos1, $wordpos2);
$result = highlightWords($resText, $word);
И это работает для меня 🙂