Stuk tekst splitten uit een string (voor zoekmachine)
Ik bijvoorbeeld de eerste 30 tekens van de tekst onder of naast de titel weergeven. Maarjah alleen een stukje tekst zegt niets zoveel.
-->> Ik wil graag het stuk tekst echoën waar het woord voorkomt. Hoe kan ik dit doen zonder de complete text op te delen in een array?
**Voorbeelden zijn overal op internet te zien. **Google's zoekresultaten bijvoorbeeld. Of die van phpfreakz.
Je zet gewoon de beschrijving, het onderwerp, en het zoekwoord in een tabel. Dan zoek je op het zoekwoord.
Ik gebruik nu dit:
--------------------
if(isset($_POST['search'])){
$gSearch = addslashes($_POST['search']);
$gSearch = htmlspecialchars($gSearch);
$select = "SELECT * FROM ".$tbl_maintext." WHERE MATCH (text, title) AGAINST ('$gSearch*' IN BOOLEAN MODE)";
$result = mysql_query($select,$db) or die(mysql_error());
if($result){
while($search = mysql_fetch_assoc($result)){
echo $search['title'], '<br>';
$text = html_entity_decode($search['text']);
$text = stripslashes($text);
$text = substr($text,0,100). "...";
echo '<blockquote>', strip_tags($text), '</blockquote>';
}
}
} else {
?>
<form action="" method="POST">
<table>
<tr><td>Zoeken op de website</td></tr>
<tr><td>Zoekwoord:<br><input type="text" name="search" title="Zoekwoord" maxlength="50"></td></tr>
<tr><td><input type="submit" value="Zoek"></td></tr>
</table>
</form>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?
}
--------------------
Kijk het zoeken lukt wel, maar ik wil de resultaten mooi op rang sorteren en een stukje tekst plaatsen waar het zoekwoord voorkomt.
Check bijvoorbeeld deze screen:
http://www.fckeditor.nl/screen.jpg
Dat moet toch duidelijk zijn?
Degene die weet hoe zou me geweldig kunnen helpen! Alvast bedankt!
}
--------------------
Kijk het zoeken lukt wel, maar ik wil de resultaten mooi op rang sorteren en een stukje tekst plaatsen waar het zoekwoord voorkomt.
Check bijvoorbeeld deze screen:
http://www.fckeditor.nl/screen.jpg
Dat moet toch duidelijk zijn?
Degene die weet hoe zou me geweldig kunnen helpen! Alvast bedankt!
Werkend te zien op http://spacefrog.ath.cx/extra/phphulp/zoeken.php
En hier het script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
// Zoeken
// Highlight functie
function highlight_words($text,$zoekwoord)
{
foreach($zoekwoord as $woord)
{
$text = preg_replace("/$woord/i",'<span style="color:red;font-weight:bold;">'.$woord.'</span>',$text );
}
return($text);
}
// De tekst
$artikel = "Hier komt dan natuurlijk de rij uit je MySQL tabel";
// Zoekwoorden
$zoekwoord[] = "woord1";
$zoekwoord[] = "woord2";
$resultaat = highlight_words($artikel,$zoekwoord);
echo $resultaat;
?>
// Zoeken
// Highlight functie
function highlight_words($text,$zoekwoord)
{
foreach($zoekwoord as $woord)
{
$text = preg_replace("/$woord/i",'<span style="color:red;font-weight:bold;">'.$woord.'</span>',$text );
}
return($text);
}
// De tekst
$artikel = "Hier komt dan natuurlijk de rij uit je MySQL tabel";
// Zoekwoorden
$zoekwoord[] = "woord1";
$zoekwoord[] = "woord2";
$resultaat = highlight_words($artikel,$zoekwoord);
echo $resultaat;
?>
Bron van de code: http://forums.devarticles.com/showthread.php?mode=hybrid&t=3420
Elwin
Ik zou ook graag een zoek functie hebben met fuilltext maar hij moet ook werken als er meer dan 50% resultaten zijn ...
Ben vanmorgen hele morgen bezig geweest en heb nu dit:
$text = html_entity_decode($search['text']);
$text = stripslashes($text);
$text = strip_tags($text);
$text = strtolower($text); //converteren naar kleine letters
$needle = strlen($gSearch); // lengte woord bepalen
$pos = strpos($text, $gSearch); // positie eerste zoekwoord
$posbegin = $pos - 25; //begin bepalen
if($posbegin < 0) { $posbegin = 0; }
$poseind = $posbegin + '100';
$text = substr($text,$posbegin,$poseind); //string knippen knip(uittext, vanaf, lengte)
$length = strlen($text);
if($length > 100){
$text = substr($text, 0,125);
}
$text = str_highlight($text,$gSearch); //zoekwoord oplichten
echo '</li>';
echo '<blockquote>...', $text, '<br>lente: '.$pos, '<br>posbegin:', $posbegin.'<br>tekst:'.$length.'</blockquote>';