Hoi!
Ik probeer voor een search woorden te highlighten die gevonden zijn.
Daarvoor doe ik eerst een LIKE query in MySQL, en vervolgens wil ik de
gevonden keywords tonen in een fragmentje.
Daarvoor moet ik de positie van het woord bepalen. Probleem is echter
dat MySQL bij LIKE case insensitive werkt, en PHP bij strpos niet.
Nu los ik dit momenteel zo op:
$woordpos=strpos(strtolower($txt),strtolower($term ));
maar ik vroeg me af of er een betere oplossing is?
Ook heb ik nog een beetje het probleem, dat hij nu ook naar woorden in
de HTML tags zoekt (in de DB staat HTML). Dus, als ik nu naar Email
zoek, vind hij ook documenten waar email een form veld is. Terwijl die
vervolgens eruit gefilterd worden...
De hele code is dit: (zonder het SQL deel)
if (mysql_numrows($result)>0) {
while($RS=mysql_fetch_array($result)) {
$txt=strip_tags($RS['titel']). " ".strip_tags($RS['text']);
echo "<BR><B>",$i++,"</B> <A
HREF=\"./?id=$RS[id]\">$RS[titel]</A><BR>";
foreach ($terms as $term) {
//positie bepalen:
$woordpos=strpos(strtolower($txt),strtolower($term ));
if ($woordpos !=0) {
$startpos=$woordpos - $voorletters;
//niet voor 0 beginnen, want dan pakt hij van het eind
if ($startpos<0) {$startpos=0;}
$length=$voorletters+strlen($term)+ $naletters;
$txtpart=substr($txt,$startpos,$length);
//woord bold maken:
$txtpart=preg_replace ( "_($term)_i",
"<b>\\1</b>",$txtpart);
$txtpart="...".$txtpart."...";
echo $txtpart, "<BR>";
} else {
echo "<b>$term</b> is niet gevonden in deze
pagina.<BR>";
}
}
}
} else { echo "Helaas, niets gevonden";}
Thnx,
PanMan.
--
Have you ever had a dream, that you were so sure it was real?
What if you were unable to wake from that dream?
How would you know the difference between the dream world,
and the real world? - The Matrix.

Likes:

Quote