BBcode per RegEx

Online-Skater

Erfahrenes Mitglied
Hallo ich habe ein für mich unverständliches Problem.

Bisher habe ich folgendes genutzt:
PHP:
<?php

 $search = array("[ b ]","[ /b ]","[ i ]","[ /i ]","[ u ]","[ /u ]","[ img ]","[ /img ]",
                 "[0]","[1]","[2]","[3]","[4]","[5]","[6]","[7]","[8]","[9]",
                 "[10]","[11]","[12]","[13]","[14]","[15]","[16]","[17]","[18]",
                 "[19]","[20]","[ userq]","[ /userq]","[ quote]","[ /quote]","[ url= ","[ /url ]","]",
                 );
 $replace = array("<b>","</b>","<i>","</i>","<u>","</u>","<img src=\"","\" border=\"0\" alt=\"newsbild\" />",
                  "<img src=\"img/icons/icon_smile.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_mrgreen.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_cool.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_neutral.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_surprised.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_wink.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_biggrin.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_mad.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_sad.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_confused.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_evil.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_lol.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_eek.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_rolleyes.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_razz.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_redface.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_twisted.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_question.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_arrow.gif\" alt=\"smiley\" />","<img src=\"img/icons/icon_exclaim.gif\" alt=\"smiley\" />",
                  "<img src=\"img/icons/icon_idea.gif\" alt=\"smiley\" />","<span class=\"nick\">","</span>",
                  "<div class=\"quote\">","</div>","<a href=\"","</a>","\" target=\"_blank\">",
                  )
?>
Dann mittels str_replace() in die News eingebunden.
Doch nun habe ich mich überwunden und liebe Reguläre Ausdrücke :-) Daher mein neuer Versuch, anschließend wollte ich es auf Performance testen bzw. wissen was schneller ist.
PHP:
<?php

// Suchmuster festlegen
$search = array(
'!\[b\](.*)\[\/b\]!isU',
'!\[i\](.*)\[\/i\]!isU',
'!\[u\](.*)\[\/u\]!isU',
'!\[img\](.*)\[\/img\]!isU',
'!\[url=(.*)\](.*)\[\/url\]!isU',
'!\[userq\](.*)\[\/userq\]!isU',
'!\[quote\](.*)\[\/quote\]!isU',
'!\[(\d)\]!sU'
);

// Ersetzmuster festlegen
$replace = array(
'<b>$1</b>',
'<i>$1</i>',
'<u>$1</u>',
'<img src="$1" border="0" alt="newsbild" />',
'<a href"$1" target="_blank">$2</a>',
'<span class="nick">$1</span>',
'<div class="quote">$1</div>',
'<img src="img/icons/smile_$1.gif" alt="smiley" />'
);

function bbcode($text)
{
  $neuertext = stripslashes($text);
  $neuertext = preg_replace($search,$replace,$neuertext);
  $neuertext = nl2br($neuertext);
  return $neuertext;
}
?>
Doch leider erhalte ich folgendes: Warning: preg_replace() [function.preg-replace]: Empty regular expression in D:\xampplite\htdocs\HP\Doorstander\inc\bb_code2.php on line 30
Ich habe rausgefunden, dass es einzeln geht aber mit arrays nicht wobei im Manual steht das es auch gehen soll. Wozu zich mal hinschreiben wenns auch so gehen sollte ?
In den News binde ich es wie folgt ein:
PHP:
include "inc/bb_code2.php";
while($row = mysql_fetch_object($erg))
{
  $news = bbcode($row->news);
}

PS. Die Smiley-Bilddatein habe ich schon entsprechend geändert (smile_n.gif), nicht das Ihr euch wundert.

Vielen Dank im Vorraus.
 
Zuletzt bearbeitet:
Weil die Funktion anscheinend die Variablen $search und $replace nicht verwenden kann.
Wenn du diese der Funktion mitübergibst bzw. in ihr deklarierst, funktioniert alles.
 
*Mir an den Kopf fass*
An sowas simples habe ich natürlich nicht gedacht :rolleyes:

Vielen Dank

Weiß vllt. noch einer aus Erfahrung ob die letzte Variante performanter ist, oder nimmt sich das nicht viel ?
 
Zuletzt bearbeitet:
Du musst sie der Function nicht mal mit übergeben. Deklariere sie einfach als 'global'
PHP:
function bbcode($text)
{
   global $search, $replace;
   #...
}
 
Zurück