[Acronym-Mod] Problem mit RegEx

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
TomW

[Acronym-Mod] Problem mit RegEx

Beitrag von TomW »

Hallo,

Ich habe in meinem Forum den Acronym-Mod eingebaut, dieser zeigt mir zu bestimmten Begriffen eine Erklärung als Tooltip an, jetzt ist es so wenn das Wort Teil eines anderen Wortes ist, wird die Erklärung auch angezeigt. Es soll z.B: Auto aber nicht Autobahn oder Vorführauto ersetzt werden.

Hier könnt Ihr euch das mal anschauen -> Klick

Und hier der Code der dafür verantwortlich ist.

Code: Alles auswählen

function acronym_pass($message)
{
   static $orig, $repl;

   if( !isset($orig) )
   {
      global $db, $board_config;
      $orig = $repl = array();

      $sql = 'SELECT * FROM ' . ACRONYMS_TABLE;
      if( !$result = $db->sql_query($sql) )
      {
         message_die(GENERAL_ERROR, "Couldn't obtain acronyms data", "", __LINE__, __FILE__, $sql);
      }
      
      $acronyms = $db->sql_fetchrowset($result);

      if( count($acronyms) )
      {
         usort( $acronyms, 'acronym_sort' );
      }

      for ($i = 0; $i < count($acronyms); $i++)
      {
             $orig[] = '#\b(' . phpbb_preg_quote( $acronyms[$i]['acronym'], "/") . ')\b# i';
            $descrip =$acronyms[$i]["description"];
            $acrony =  htmlentities($acronyms[$i]["acronym"], ENT_QUOTES);
            $repl[] = "<a class=acro href=\"lexikon.php?suchwort=". $acrony ."&suchen=1\" onmouseover=\"return overlib('". $descrip ."', STICKY, CAPTION, '". $acrony ."');\" onmouseout=\"return nd();\">" . $acrony . "</a>";
      }
   }
   
   if( count( $orig ) )
   {
      $segments = preg_split( '#(<a class=acro href=\"lexikon.php?suchwort=.+?>.+?</a>|<.+?>)#si' , $message, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

      $message = '';

      foreach( $segments as $seg )
      {
         if( $seg[0] != '<' && $seg[0] != '[' )
         {
            $message .= str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#eis', "preg_replace(\$orig, \$repl, '\\0')", '>' . $seg . '<'), 1, -1));
         }
         else
         {
            $message .= $seg;
         }
      }
   }
   
   return $message;
}
Ich hoffe mir kann jemand bei meinem Problem helfen.

TomW
Zuletzt geändert von TomW am Do 20.Mär, 2008 20:03, insgesamt 1-mal geändert.
Antworten