Hi,
ich versuche mit hilfe von Regulären Ausdrücken angaben wie z.b
|
Quellcode
|
1
|
[url=http://www.google.de]google[/url]
|
in normales HTML umzuwandeln. Dafür benutze ich folgende Funktion:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
|
function parseBBCode($value)
{
$value = preg_replace('/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $value);
$value = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $value);
$value = preg_replace('/\[color=([[:alnum:]]{6}?).*\](.*?)\[\/color\]/', '<font color="#$1">$2</font>', $value);
$value = preg_replace('/\[url=(www[^ ]+).*\](.*?)\[\/url\]/', '<a href="http://$1">$2</a>', $value);
$value = preg_replace('/\[url=([^ ]+).*\](.*?)\[\/url\]/', '<a href="$1">$2</a>', $value);
$value = preg_replace('/\[url\](.*?)\[\/url\]/', '<a href="$1">$1</a>', $value);
return $value;
}
|
Wenn ich das einzeln teste funktioniert das auch, nur wenn ich mehrere URL`s in einem String umwandeln möchte dann führt das immer zu einer falschen Ausgabe.
Siehe hier:
Klick
Die ersten 3 URL`s welche so ausgegeben werden:
|
PHP-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
$text = "[url=http://www.test.de]test[/url] <br /><br />";
echo parseBBCode($text);
$text2 = "[url]http://www.test.de[/url] <br /><br />";
echo parseBBCode($text2);
$text3 = "[url=www.test.de]test2[/url] <br /><br />";
echo parseBBCode($text3);
|
klappen ja, nur die 4te welche so ausgegeben werden soll:
|
PHP-Quelltext
|
1
2
3
|
$text4 = "[url=http://www.test.de]test[/url] <br \> [url=www.test.de]test2[/url] <br /> [url]www.test.de[/url] <br />";
echo parseBBCode($text4);
|
wird nicht mehr korrekt ausgegeben.
Woran liegt das?