Hallo Nobbie,
hier mal mein (Test)script...
- Code: Select all
function bbcode($string) {
$old_string = "";
while($old_string != $string) {
$old_string = $string;
$string = preg_replace_callback('{\[(\w+)((=)(.+)|())\]((.|\n)*)\[/\1\]}U', 'bbcode_callback', $string);
}
return nl2br($string);
}
function bbcode_callback($matches) {
$tag = trim($matches[1]);
echo strlen($matches[6])."<br><br>";
$inner_string = $matches[6];
$argument = $matches[4];
switch($tag) {
case 'B': $replacement = "<$tag>".$inner_string."</$tag>";
break;
case 'COLOR':
$color = $argument ? $argument : $inner_string;
$replacement = "<span style=\"color:" . $color . ";\">" . $inner_string . "</span>";
break;
case 'SIZE':
$size = $argument ? $argument : $inner_string;
$replacement = '<span style="font-size:' . $size . 'px;">' . $inner_string . '</span>';
break;
}
return $replacement;
}
$test1 = '[B]TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TE[/B]';
$test2 = '[COLOR=#990000]TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST [/COLOR]';
$test3 = '[SIZE=20]TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST
TEST TEST TEST TEST TEST TEST TEST TEST [/SIZE]';
echo bbcode($test1);
echo strlen($test1);
// $test 1: String gesamt = 619 Zeichen; eigentlicher Text = 612 Zeichen
// $test 2: String gesamt = 633 Zeichen; eigentlicher Text = 610 Zeichen
// $test 3: String gesamt = 626 Zeichen; eigentlicher Text = 610 Zeichen
Wie schon geschreiben, ich nutze diese funktion schon sehr lange, auf Xampp und auf verschiedenen Servers.
Ich war ganz überrascht, dass es plötzlich nicht mehr funktioniert.
Ich dachte, dass vielleicht irgendwelche Ändrungen in PHP vorgenommen wurden, die diesen fehler verursachen kann.
Bei weiteren Tests ist mir augefallen, dass es def. nur an der anzahl der zeichen liegt innerhalb der bbcode-tags liegt ($matches[6])...
wie lange der string insgesamt ist, ist völlig egal...
auch ein string mit über 5 Millionen zeichen OHNE bbcodes ist zum test ohne probleme durch die Funktion gelaufen !
Bei mehre bbcode-tags von ca 30-40 Zeichen wird die seite auch einwandfrei angezeigt, sobald ein bbcode-tag mehr als ~ 620 Zeichen kann wir die seite nicht angezeigt...
Leider bekomme ich auch keine php fehlermeldung... Die fehlermeldmung kommt von Browser, in dem Fall Firefox mit der Meldung "Fehler: Verbindung unterbrochen. Die Verbindung zum Server wurde zurückgesetzt, während die Seite geladen wurde....
Hast du vielleicht eine Idee woran es liegen könnte?
Vielen Dank schon mal
Markus