Hvordan undgås utilsigtet orddeling
Har et søgescript, som i princippet fungerer efter følgende model:<?php
if(isset($_POST['sogning']) && ($_POST['sogning']!=""))
{
$text = "Hvordan kringler jeg det nu, så det ikke er HELE teksten der vises som output, men kun en del af den (naturligvis den del hvor søgeordet indgår).
Det kan jo godt være at søgeordet står midt nede i teksten, og derfor skal tekstoutputtet i så fald vises med ...... - men naturligvis skal vi kun have de tre prikker HVIS der udelades noget på den side af det viste hvor prikkerne står.";
if(! function_exists('stripos') ) {
function stripos($haystack, $needle, $offset=0) {
return strpos(strtolower($haystack), strtolower($needle), $offset);
}
}
$term = $_POST['sogning']; // Hvad der søges efter
$display = 20; // antal tegn der vises før/efter
$pos = stripos($text,$term);
if ( $pos === false )
{
echo "Søgningen gav intet resultat...";
}
else
{
$beginpos = $pos - $display;
$endpos = $pos + $display + strlen($term);
if( $beginpos < 0 )
$beginpos = 0;
if( $beginpos == 0 )
$pre = '';
else
$pre = '...';
if( $endpos >= strlen($text) )
$post = '';
else
$post = '...';
$text = substr($text,$beginpos,($endpos-$beginpos+strlen($term)));
$term_preg = preg_quote($term);
$text = preg_replace("/($term_preg)/im",'<b>\1</b>',$text);
echo $pre.$text.$post;
}
}
else
{
?>
<FORM ACTION="<? echo $_SERVER['PHP_SELF']; ?>" METHOD="POST" NAME=formnavn>
<INPUT TYPE="text" NAME="sogning">
<INPUT TYPE="submit" VALUE="søg">
</FORM>
<?php
}
?>
Det fungerer også rimeligt tilfredsstillende, men det er irriterende at ord i begyndelsen og slutningen af outputtet ofte bliver "hakket i stykker, altså kan outputtet godt komme til at ende på: "af det viste hvor prikk..."
Hvordan undgår jeg at begyndelses og slutordene "slås i stykker?