Поиск слова в тексте (строке) на php и вывод части текста вокруг искомого слова

W
На сайте с 14.02.2016
Offline
44
138

Привет кодирам помогите плиз

Требуется вывести часть текста вокруг искомого слова, а не выводить весь текст из базы данных . 

Выглядит так:

Поиск слова в тексте

Нашел в сети этот код? то что надо! но не могу понять как внедрить его в страницу поиска :(

/**
 *
 * @param string $data строка в которой ищем
 * @param string $word что ищем
 * @param integer $interval интервал символов до и символов после
 * @param bool $ci нечувствителен к регистру по умолчанию true
 * @return string|false результат, если false - нет вхождения
 */
function strchop($data,$word,$interval,$ci=true)
{
    //if($ci){$position=stripos($data,$word);}else{$position = strpos($data,$word);};
    $position = $ci?mb_stripos($data,$word):mb_strpos($data,$word);
    //ничего нет - вернули false
    if(!$position) return false;
    //Определяем стартовую позицию новой строки
    $start_position = $position - $interval;
    //От конца слова определили конечный интервал
    $end_position = $position + mb_strlen($word) + $interval;
    //Если стартовая позиция отрицательная делаем в 0
    if($start_position < 0) $start_position = 0;
    //определяем длину новой строки 
    $len = $end_position - $start_position;
    $length = (mb_strlen($data) > $len) ? mb_strripos(mb_substr($data, 0, $len), ' ') : $len;
    //вернули результат
    $kusok = '...'.mb_substr($data,$start_position,$length, 'UTF-8').'...';
    return str_replace($word, "<span class=\"word\">".$word."</span>", $kusok);
}

Код который выводит по заданному слову начало статьи из бд content

<?php require_once('inc-main.php'); ?>
<?php 
$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$start = $time;

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

//Blocking too long queries
if(strlen(@$_GET['q'])>50){
        header("Location:".$_SERVER['HTTP_REFERER']);
        exit;
}

//Search
if((@$_GET['q'])!=""){

mysql_select_db($database_saha, $saha);
$query_Crawlsettings = "SELECT * FROM crawl_settings";
$Crawlsettings = mysql_query($query_Crawlsettings, $saha) or die(mysql_error());
$row_Crawlsettings = mysql_fetch_assoc($Crawlsettings);
$totalRows_Crawlsettings = mysql_num_rows($Crawlsettings);

$lim=$row_Crawlsettings['search_results_per_page'];

if(@$_GET['stt']==""){
        $stt=0;
}else{
        $stt=@$_GET['stt'];
}

if(isset($_GET['stt']) && is_numeric(@$_GET['stt'])!=1){
header("Location: index.php");
exit;
}
        
$cid=mysql_real_escape_string($_GET['q']);
$stt=mysql_real_escape_string($stt);

        if(strstr($cid," ",true)!=""){
$resultQuerry=explode(" ",$cid);
        }else{
$resultQuerry=array($cid);              
        }

$resultQuerryImageResults="";
$resultQuerryResults="";

foreach($resultQuerry as $cids){

if($row_Crawlsettings['crawl_images_image_url']=="Y"){  
$resultQuerryImageResults.="crawl_images.image_url LIKE '%$cids%' OR ";
}
if($row_Crawlsettings['crawl_images_current_url']=="Y"){        
$resultQuerryImageResults.="crawl_images.current_url LIKE '%$cids%'  OR ";
}
if($row_Crawlsettings['crawl_images_keywords']=="Y"){   
$resultQuerryImageResults.="crawl_images.keywords LIKE '%$cids%' OR ";
}
if($row_Crawlsettings['crawl_title']=="Y"){     
$resultQuerryResults.="crawl.title LIKE '%$cids%' OR ";
}
if($row_Crawlsettings['crawl_description']=="Y"){       
$resultQuerryResults.="crawl.description LIKE '%$cids%'  OR ";
}
if($row_Crawlsettings['crawl_current_url']=="Y"){       
$resultQuerryResults.="crawl.current_url LIKE '%$cids%'  OR ";
}
if($row_Crawlsettings['crawl_keywords']=="Y"){  
$resultQuerryResults.="crawl.keywords LIKE '%$cids%'  OR ";
}
if($row_Crawlsettings['crawl_content']=="Y"){   
$resultQuerryResults.="crawl.content LIKE '%$cids%' OR ";
}
}


if($resultQuerryImageResults!=""){
$resultQuerryImageResults=substr($resultQuerryImageResults,0,-4);
        
mysql_select_db($database_saha, $saha);
$query_imagesFound = "SELECT * FROM crawl_images WHERE crawl_images.deleted='N' AND  ($resultQuerryImageResults) LIMIT 5";
$imagesFound = mysql_query($query_imagesFound, $saha) or die(mysql_error());
$row_imagesFound = mysql_fetch_assoc($imagesFound);
$totalRows_imagesFound = mysql_num_rows($imagesFound);

mysql_select_db($database_saha, $saha);
$query_imagesFoundTotal = "SELECT * FROM crawl_images WHERE crawl_images.deleted='N' AND  ($resultQuerryImageResults)";
$imagesFoundTotal = mysql_query($query_imagesFoundTotal, $saha) or die(mysql_error());
$row_imagesFoundTotal = mysql_fetch_assoc($imagesFoundTotal);
$totalRows_imagesFoundTotal = mysql_num_rows($imagesFoundTotal);
}


if($resultQuerryResults!=""){
$resultQuerryResults=substr($resultQuerryResults,0,-4);

mysql_select_db($database_saha, $saha);
$query_total = "SELECT * FROM crawl WHERE crawl.deleted='N' AND ($resultQuerryResults)";
$total = mysql_query($query_total, $saha) or die(mysql_error());
$row_total = mysql_fetch_assoc($total);
$totalRows_total = mysql_num_rows($total);

mysql_select_db($database_saha, $saha);
$query_searchResults = "SELECT * FROM crawl WHERE crawl.deleted='N' AND ($resultQuerryResults) LIMIT $stt,$lim";
$searchResults = mysql_query($query_searchResults, $saha) or die(mysql_error());
$row_searchResults = mysql_fetch_assoc($searchResults);
$totalRows_searchResults = mysql_num_rows($searchResults);

}
//Writing Log

if(@$_GET['stt']==""){

$keyword=strtolower($cid);

mysql_select_db($database_saha, $saha);
$query_selectedCrawl1 = "SELECT * FROM log WHERE log.keyword='$keyword'";
$selectedCrawl1 = mysql_query($query_selectedCrawl1, $saha) or die(mysql_error());
$row_selectedCrawl1 = mysql_fetch_assoc($selectedCrawl1);
$totalRows_selectedCrawl1 = mysql_num_rows($selectedCrawl1);

if(@$totalRows_total>0){        
            $insertSQL = sprintf("INSERT INTO log (count, ip, results, date, keyword, time) VALUES (%s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($totalRows_selectedCrawl1+1, "int"),
                       GetSQLValueString($_SERVER['REMOTE_ADDR'], "text"),
                       GetSQLValueString($totalRows_total, "int"),
                       GetSQLValueString(date("Y-m-d"), "date"),
                       GetSQLValueString(strtolower($cid), "text"),
                       GetSQLValueString(date("H:i:s"), "date"));

  mysql_select_db($database_saha, $saha);
  $Result1 = mysql_query($insertSQL, $saha) or die(mysql_error());
}
}
//End Writing Log

}

$time = microtime();
$time = explode(' ', $time);
$time = $time[1] + $time[0];
$finish = $time;
$total_time = round(($finish - $start), 4);

function searchedSample($database_saha, $saha,$searcTerm,$queryID){

mb_http_input("utf-8");
mb_http_output("utf-8");

$searcTerm=mysql_real_escape_string($searcTerm);
$queryID=mysql_real_escape_string($queryID);

mysql_select_db($database_saha, $saha);
$query_searchResultsSample = "SELECT * FROM crawl WHERE crawl.id='$queryID' AND crawl.deleted='N' AND (crawl.title LIKE '%$searcTerm%' OR crawl.description LIKE '%$searcTerm%'  OR crawl.current_url LIKE '%$searcTerm%'  OR crawl.keywords LIKE '%$searcTerm%'  OR crawl.content LIKE '%$searcTerm%')";
$searchResultsSample = mysql_query($query_searchResultsSample, $saha) or die(mysql_error());
$row_searchResultsSample = mysql_fetch_assoc($searchResultsSample);
$totalRows_searchResultsSample = mysql_num_rows($searchResultsSample);

$content=NULL;
$contentArray=explode(" ",$row_searchResultsSample['content']);
$fileCount=0;
if(is_array($contentArray)){
        foreach ($contentArray as $key) { 
        $fileCount++;
                if($fileCount<32){
                        
                        $LowerStr=strtoupper($key);
                        $LowersearcTerm=strtoupper($searcTerm);
                        if(strpos($LowerStr,$LowersearcTerm)!== false){
                                $keyWard="<strong style=\" text-decoration:underline;\">$key</strong>";
                        }else{
                                $keyWard=$key;
                        }
                $content.=$keyWard." ";
                }
        }
}

return $content;
}
?>

Помогите пожалуйста

Dreammaker
На сайте с 20.04.2006
Offline
570
#1

Нашел в сети этот код? то что надо! но не могу понять как внедрить его в страницу поиска :(

Код устарел лет, как минимум, на 5, и  будет работать только на php5   и тот под вопросом.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий