kostenloser Webspace werbefrei: lima-city


PHP: Listen-Regex

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n*k

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie wäre es, wenn du HTML lernst?
    Ein <li> würde dir schon ungemein weiter helfen.
  4. n****x


    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/
  5. Autor dieses Themas

    n*k

    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
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!