BBCode: [*]

Leomuck

Mitglied
Hallo allerseits,

ich bin gerade dabei, einen kleinen BBCode-Editor zu basteln, der auch Listen (wie hier) zulässt.

[ list ][ /list ] lasse ich einfach in <ul></ul> umwandeln:
PHP:
$string = preg_replace('!\[list\](.*)\[/list\]!isU', '<ul>$1</ul>', $string);

Das funktioniert auch einwandfrei, macht mir allerdings Probleme. Folgendes habe ich versucht:
PHP:
$string = preg_replace('!\[\*\](.*)!isU', '<li>$1</li>', $string);
Anstatt <li>{text}</li> macht mir das Ganze aber <li></li>{text}, was ich nicht so wirklich verstehe.

Hat jemand eine Idee wieso bzw. eine bessere Lösung?


Grüße,
Leomuck
 
Käse. :)

Du könntest bis zum nächsten [ * ] oder [ /list ] suchen.

Also z. B.
PHP:
preg_replace(array( '!\[\*\](.*)\[\*\]!isU' , '!\[\*\](.*)\[\/list\]!isU'), array( '<li>$1</li>', '<li>$1</li></ul>' ), $string);
Oder so ähnlich halt.
 
Das klappt insofern leider nicht, als dass die Funktion gleichzeitig das nächste ersetzt und somit ein Listeneintrag "verloren" geht.
 
PHP:
<?php
$string = '[*]test 1
[*] test 2
[*] test3';

$list = explode('[*]', $string);

print_r($list);

echo '<ul>';
foreach($list as $val)
{
	if(!empty($val))
		echo '<li>'.trim($val).'</li>';
}
echo '</ul>';
?>

So gehts...
 
Zurück