Avatar billede sthen Nybegynder
22. februar 2005 - 01:21 Der er 3 kommentarer og
1 løsning

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?
Avatar billede synfab Nybegynder
22. februar 2005 - 10:45 #1
prøv med denne matchet fra denne regexp i stedet for din substr:

new RegExp("\40.{0,".$display."}".$term.".{0,".$display."}\40","gi");
Avatar billede sthen Nybegynder
22. februar 2005 - 12:15 #2
Det kan jeg ikke få til at fungere - hvordan mener du at det skal stå, sådan mere præcis i mit script (og hvor)
Avatar billede synfab Nybegynder
22. februar 2005 - 13:32 #3
er ikke den store php-mand, men bud ville være:

erstat disse linier:
      $text =  substr($text,$beginpos,($endpos-$beginpos+strlen($term)));
      $term_preg = preg_quote($term);
      $text = preg_replace("/($term_preg)/im",'<b>\1</b>',$text);

med disse:
    $term_preg = preg_quote($term);
    preg_match("/\40(.{0,".$display."}".$term_preg.".{0,".$display."})\40/i", $text, $matches);
    $text = $matches[1];
    $text = preg_replace("/($term_preg)/im",'<strong>\1</strong>',$text);
Avatar billede sthen Nybegynder
23. februar 2005 - 19:46 #4
Kan altså ikke få det til at fungere.
Beklager.
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester