2011-07-04 2 views
0

나는 MySQL 데이터베이스를 쿼리 한 다음 PHP 스타일을 허용하도록 HTML을 통해 결과를 구문 분석하는 PHP 검색 스크립트를 사용합니다. 스크립트가 사용자가 검색 한 결과의 모든 키워드를 강조하고 싶습니다. PHP로 어떻게 할 수 있습니까?PHP 검색 스크립트의 키워드 강조 표시

내 PHP 스크립트입니다 : 당신은 str_replace을 사용할 수 있습니다

<?php 

mysql_connect("localhost","username","password"); 
mysql_select_db("database"); 

if(!empty($_GET['q'])){ 
$query=mysql_real_escape_string(trim($_GET['q'])); 
$searchSQL="SELECT * FROM links WHERE `title` LIKE '%{$query}%' LIMIT 8"; 
$searchResult=mysql_query($searchSQL); 

while ($row=mysql_fetch_assoc($searchResult)){ 
    $results[]="<a href='{$row['url']}' class='webresult'><div class='title'>{$row['title']}</div><div class='desc'>{$row['description']}</div><div class='url'>{$row['url']}</div></a>"; 
} 

if(empty($results)){ 
echo 'No results were found'; 
} else { 
echo implode($results); 
} 
} 

?> 

답변

0

단순하게 당신은 여기에 루프를 적용 할 수 :

$searchvar = trim($_GET['q']); 
while ($row=mysql_fetch_assoc($searchResult)){ 
    $description = str_replace($searchvar, '<span class="highlight">'.$searchvar."</span>", $row['description']); 
    $results .="<a href='{$row['url']}' class='webresult'> 
    <div class='title'>{$row['title']}</div> 
    <div class='desc'>{$description}</div> 
    <div class='url'>{$row['url']}</div></a>"; 
} 

이 조금 더 나은 만들려면 :

$searchvar = explode(" ", trim($_GET['q'])); //puts each space separated word into the array.  
while ($row=mysql_fetch_assoc($searchResult)){ 
    $description = $row['description']; 
    foreach($searchvar as $var) $description = str_replace($var, '<span class="highlight">'.$var."</span>", $description); 
    $description = str_replace($searchvar, '<span class="highlight">'.$searchvar."</span>", $row['description']); 
    $results .="<a href='{$row['url']}' class='webresult'> 
    <div class='title'>{$row['title']}</div> 
    <div class='desc'>{$description}</div> 
    <div class='url'>{$row['url']}</div></a>"; 
} 

이 두 번째의 이점이있는 경우 노란색 "아이팟 toudch에서 사용자 유형 "형식을 무효로하고 결과를 좀 더 일반적으로 만드는"ipod ","toudch "및"yellow "를 검색하게 될 것입니다.

당신은 하나의 교환해야합니다 :는 SQL에 대한

foreach(explode(" ", trim($_GET['q']) as $searchvar) $where[] = "like '%$searchvar%'"; 
$wheresql = implode(" OR ", $where); 

각 검색 "단어"를 얻는 모습 할

like '%query%' 

또는 당신이 가진 제한된 검색을해야합니다 무관 한 하이라이트.

0

. 사용자가 사용하는 각 키워드에 대해 $search 배열에 넣고 $replace 배열에도 넣습니다. 그러나 나중에 CSS로 스타일을 지정할 수있는 후자에 클래스 span 태그로 묶습니다. 예를 들어 :

$search = array('apple', 'orange'); 
$replace = array(); 
foreach ($search as $word) 
{ 
    $replace[] = "<span class='highlight'>$word</span>"; 
} 

$string = str_replace($search, $replace, $string); 

편집 : $query이 하나의 공백으로 구분 된 키워드가 포함되어 있다고 가정하면, 당신은, 검색 배열을

$search = explode(' ', $query); 

을 이런 식으로 (explode로) 얻을 또는 수 당신이 원한다면 (같은 당신이 + 같은 쿼리 연산자를 사용하는 경우) $query 변수에서 키워드를 처리하는 더 복잡한 논리를 추가, 당신은 for 루프를 사용할 수 있습니다

$queryTerms = explode(' ', $query); 
$search = array(); 
foreach ($queryTerms as $term) 
{ 
    // do some processing of the $term (like delete "+"?) 
    // ... 

    $search[] = $processedTerm; 
} 
+0

@Callum 당신은 그렇게 할 수있는'for' 루프를 사용할 수 있습니다.또는 모든 사용자가 공백으로 구분 된 단어를 검색한다고 가정하면 검색 배열을 얻기 위해'$ query'를 폭발시킬 수 있습니다 ... 나는 그것을 내 대답으로 편집 할 것입니다. –

0

나는 또한 결과의 단어를 강조하기 위해이 솔루션을 발견 regex 또는 단순히 str을 사용하여 특정 문자열을 찾고 스팬을 추가하십시오 :

while ($row=mysql_fetch_assoc($searchResult)){ 
    $str ="<a href='".$row['url']."' class='webresult'>"; 
    $str .="<div class='title'>".$row['title']."</div>"; 
    $str .="<div class='desc'>"; 
    $str .= str_replace($query,"<span class='hightlighted'>".$query."</span>",$row['description']); 
    $str .="</div><div class='url'>".$row['url']."</div></a>"; 
    $result[] = $str; 
} 

16,이제 CSS :

span.highlighted { 
    background-color: yellow; 
} 
0

사용할 수

도움이 될 경우
$text = $searchresults; 
class highlight 
{ 
    public $output_text; 

    function __construct($text, $words) 
    { 
    $split_words = explode(" " , $words); 

    foreach ($split_words as $word) 
    { 
     $text = preg_replace("|($word)|Ui" , "<b>$1</b>" , $text); 
    } 
    $this->output_text = $text; 
    } 
} 
$highlight = new highlight($searchresults, $keywords); 
echo $highlight; 

,

감사합니다,

최대 :