PHP: Listen-Regex
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
aufzhlung
ausdruck
fragen
gruss
informative antwort
klasse
korrekte verschachtelung
listen
lsen
mll
punkt
sonderzeichen
tag
verschachtelten elementen
verschachtelung
vielen dank
zusammen
zusammenhang
beraus
-
Hallo Zusammen.
Ich habe eine Frage, die im Zusammenhang mit dem erstellen von tag/listen">Listen für den BB-Code auftrat:
Ich will als eine Listenart einen Pfeil anstatt des Punktes anzeigen lassen. Der HTML-Code stimmt, nur mit den Regexen hab ich immer Probleme ;) .
$str = preg_replace('#\\[list=->\](.*)\[\/list\]#Uis',
'<ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul>',
$str);
$str = preg_replace('#\\[list=\"->\"\](.*)\[\/list\]#Uis',
'<ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul>',
$str);
hier soll [list=->] bzw. [list="->"] durch <ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul> ersetzt werden. Nur leider Funktionierts nich :P . Vielleicht kann mir irgendwer weiterhelfen?! Was muss ich escapen oder machen?
Danke schonmal
Gruss NGK
Beitrag geaendert: 13.12.2006 19:23:32 von ngk -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wie wäre es, wenn du HTML lernst?
Ein <li> würde dir schon ungemein weiter helfen. -
Hallo Zusammen.
Ich habe eine Frage, die im Zusammenhang mit dem erstellen von Listen für den BB-Code auftrat:
Ich will als eine Listenart einen Pfeil anstatt des Punktes anzeigen lassen. Der HTML-Code stimmt, nur mit den Regexen hab ich immer Probleme ;) .
$str = preg_replace('#\\[list=->\](.*)\[\/list\]#Uis',
'<ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul>',
$str); ...
">" ist in PCRE-Sprache ein Sonderzeichen, also musst du es escapen.
Dein Ausdruck ist "gierig". Ich würde "(.*?)" dem "(.*)" vorziehen, sonst "machted" der Ausdruck auf eine Teilzeichenkette vom ersten "[list...]" bis zum letzten "[/list]", das er findet. Das wirst du bei mehrern Listen sicher nicht so beabsichtigt haben. Nebenbei ist ein leerer Listenpunkt auch unschön, daher vielleicht besser: "(.+?)".
Außerdem würde ich die Anzeige einer selbst definierten Bullet-Grafik ins CSS verlegen und die Liste nur mit einer CSS-Klasse darstellen:
<style>
ul.pfeil {
list-style-image: url(blubb.gif);
}
</style>
...
<body>
Im HTML-Body musst du dann nur die Liste mit Klassennamen reinschreiben:
print('<ul class="pfeil">');
Die Listenpunkte kannst du dann ganz gewöhnlich mit <li>...</li> definieren. Sie erhalten automatisch die passende Grafik als Aufzählungszeichen.
http://de.selfhtml.org/html/text/listen.htm#aufzaehlung
Allerdings ist das Erzeugen von Listen als BBCode nicht ganz trivial, wenn man es richtig machen will. (Unnummerierte) Listen bestehen aus zwei verschachtelten Elementen: <ul>...</ul> (Listen-"Rahmen") und <li>...</li> (Listenelemente). Du kannst das wie phpBB lösen und drei BB-Tags definieren:
[list]
[*] Listenpunkt
[/list]
Das überlässt aber die korrekte Verschachtelung demjenigen, der dann den BBCode schreibt, z.B. dem Poster in einem Forum. Macht er Fehler, verhauts dir die HTML-Syntax. Im schlimmsten Fall zeigt der Browser Müll an.
Also müsstest du die Verschachtelungen prüfen. Das ist nicht ganz einfach zu realisieren. Daher lohnt sich ein Blick auf eine fertige BBCode-Parser-Klasse, wie die von Christian Seiler:
http://www.christian-seiler.de/projekte/php/bbcode/ -
Hallo.
Danke, lucas9991, für deine überaus nette und informative Antwort, welche absolut auf das Thema bezogen war.
Ne, Spass beiseite: Die Antwort von notfux hat mir sehr geholfen. Vielen Dank dafür. Es klappt jetz auch.
Gruss NGK -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage