|
|
Aktuelle Zeit: 22. Mai 2013, 19:00
|
Unbeantwortete Themen | Aktive Themen
|
Seite 1 von 1
|
[ 6 Beiträge ] |
|
| Autor |
Nachricht |
|
mkatthoefer
Registriert: 15. Feb 2011, 18:39 Beiträge: 14
|
 Absätze einfügen
Hallo liebes Forum, ich habe einen BB-Code-Editor entwickelt, der mit RegEx arbeitet. Dieser funktioniert auch soweit ganz gut... Nun möchte ich diesen um eine Funktion erweitern: Absätze bzw. p-Tags. Der Folgende Text: Code: Hallo. Wie geht es dir?
Mir geht es gut.
[file]gut.jpg[/file]
soll in diesen umgewandelt werden: Code: <p>Hallo. Wie geht es dir?</p> <p>Mir geht es gut.</p> [file]gut.jpg[/file]
Es soll also um jeden Text-Baustein ein <p>-Tag gelegt werden. Bei einer neuen Zeile soll dann ein neues <p>-Tag eingefügt werden. Andere BB-Codes, wie in diesem Beispiel das [file]-Tag sollen aber nicht umgewandelt werden. Zusätzlich sollen alle überflüssigen Zeilenumbrüche im Text entfernt werden. Da ich leider (keine) Ahnung von RegEx habe, bitte ich euch bei der Realisierung dieser Funktion um Hilfe. Ich freue mich auch eure Antworten.
|
| 23. Apr 2012, 17:48 |
|
 |
|
pit
Registriert: 4. Apr 2008, 08:07 Beiträge: 141 Wohnort: Berlin
|
 Re: Absätze einfügen
Hi, wie liegt denn dein Text vor ? Als 3 einzelne Variablen, oder durch CR-LF getrennt ? Ich sehe im Text auch kein BB-Code. Zeig mal PHP-Beispielcode, wie dein Text vorliegt. Oder suchst du eine js-Lösung ? Dann: 'ich habe einen BB-Code-Editor entwickelt, der mit RegEx arbeitet.' und 'Da ich leider (keine) Ahnung von RegEx habe', was denn nun LG jspit
|
| 24. Apr 2012, 06:15 |
|
 |
|
mkatthoefer
Registriert: 15. Feb 2011, 18:39 Beiträge: 14
|
 Re: Absätze einfügen
Der Text komm von einer Textarea und ist leider nicht in drei Variablen.
|
| 24. Apr 2012, 08:09 |
|
 |
|
pit
Registriert: 4. Apr 2008, 08:07 Beiträge: 141 Wohnort: Berlin
|
 Re: Absätze einfügen
Wenn es denn in PHP realisiert werden soll, dann würde ich eine function schreiben die folgendes macht: 1. Alle überflüssigen Zeilenumbrüche entfernen (preg_replace) 2. Text in Zeilen splitten 3. In einer Schleife über alle Zeilen oder eine entsprechende array-function abtesten ob ein BB-Code in der Zeile enthalten ist und wenn nicht <p> und </p> anfügen. 4. Per join alles wieder zusammenkitten + Zeilenumbrüche zufügen wie gebraucht.
|
| 24. Apr 2012, 11:22 |
|
 |
|
hummer
Registriert: 25. Mär 2008, 01:48 Beiträge: 552 Wohnort: koblenz
|
 Re: Absätze einfügen
Hi, Code: function nl2p($str, $separator = "\n") {
$str = str_replace("\r\n", "\n", $str); $output = array_map(function($line) { $pattern = '/^\[(.*)\](.*)\[\/(.*)\]$/'; $line = trim($line); if(preg_match($pattern, $line)) { return $line; } return '<p>'.$line.'</p>'; }, array_filter(explode("\n", $str))); return join($separator, $output); } Code: $str = "Hallo. Wie geht es dir?
Mir geht es gut.
[file]gut.jpg[/file]";
echo nl2p($str);
Ausgabe: Code: <p>Hallo. Wie geht es dir?</p> <p>Mir geht es gut.</p> [file]gut.jpg[/file]
|
| 24. Apr 2012, 13:09 |
|
 |
|
hoffmann
Registriert: 19. Feb 2008, 19:06 Beiträge: 1939 Wohnort: Hannover
|
 Re: Absätze einfügen
Ein einfacher Zeilenumbruch würde ja eher durch exakt ein br-Element ersetzt werden. Wenn man allerdings einen Abschnitt hat, vor und nachdem ein oder mehrere Leerzeilen stehen, so würde man dies als Absatz interpretieren mit einem p-Element umschließen. Man wird jetzt davon ausgehen, daß alles mit einem Absatz beginnt und einem Absatz endet, von daher kann man vorne eine p-Anfangsmarkierung setzten und hinten eine p-Endmarkierung. Findet man dazwischen eine oder mehrere aufeinanderfolgende Leerzeilen, so kann man diese dann durch eine p-Endmarkierung gefolgt von einer p-Anfangsmarkierung ersetzen. Weil einige Betriebssysteme mehr als ein Zeichen für einen Zeilenumbruch verwenden, muß man sich um die überflüssigen Zeichen vorher kümmern, also etwa mittels preg_replace gegen nichts tauschen.
Man kann indes auch nicht davon ausgehen, daß alle einfachen Zeilenumbrüche ohne Leerzeile wirklich gewünscht sind und nicht nur durch die Eingabeart bewirkt sind. Sofern man also nicht mit Gedichten oder dergleichen rechnet, kann es auch sinnvoll sein, einfache Umbrüche zu ignorieren und nicht durch br zu ersetzen. Da die einfache Klartexteingabe ja keine eindeutige Strukturierung zuläßt, kann man das auch nicht eindeutig und automatisch in eine Struktur einer Auszeichnungssprache umsetzen.
Wenn irgendwas den BB-Code in Elemente konvertiert, muß man natürlich auch gucken, daß dies sinnvoll passiert, innerhalb von p-Elementen dürfen etwa nur inzeilige Elemente vorkommen. Fügt man irgendwo Ende und Anfang eines Absatzes ein, so darf natürlich diese BB-Code-Ersetzung auch nicht davor und dahinter zusammenhängende Markierungen setzen. Das müßte dann entsprechend wieder an der Absatzstelle aufgesplittert werden. Oder man muß umgedreht den Absatz aufsplittern, wenn der BBC-Kram ein Blockelement erzeugen sollte.
Wenn im angegebenen Beispiel etwa [file] ein img-Element erzeugt, wäre es zudem noch notwendig, wenn das nicht schon innerhalb eines Abstatzes steht, da einen Absatz drum zu machen, weil man sonst ein inzeiliges Element auf der logischen Ebene von den Blockelementen p hätte, was nicht sinnvoll ist.
Insgesamt ist die Aufgabe also nicht einfach sauber automatisch zu lösen. Statt einfaches Suchen und Ersetzen braucht man da eigentlich schon einen parser, der die richtige Struktur versucht zu erraten. Von daher wundert es nicht, daß die in Foren eingesetzten Skripte oft diese oder jene Macke haben und die Ergebnisse oft dringend überarbeitungsbedürftig sind.
_________________ Hilfen zu SVG, XHTML, CSS, PHP (de) | SVG-Animationstest (de, en) | LML (en) | DasSpiel | Öffentliche Kunst in Hannover
|
| 24. Apr 2012, 13:28 |
|
 |
|
|
Seite 1 von 1
|
[ 6 Beiträge ] |
|
Wer ist online? |
Mitglieder in diesem Forum: White-Tiger und 4 Gäste |
|
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst Deine Beiträge in diesem Forum nicht ändern. Du darfst Deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.
|
|