Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

BBCode schreiben

Diskussion: BBCode schreiben im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hi, also ich versuche gerade für unser cms ein eigenes bbcode plugin zu schreiben. der relevante teil der function ...

Antwort
Alt 09.08.08, 20:21   #1 (permalink)
 
Registriert seit: 10.08.06
Executor Leistung: Facit NTK
Likes: 0
Standard BBCode schreiben

Anzeige

Hi, also ich versuche gerade für unser cms ein eigenes bbcode plugin zu schreiben.

der relevante teil der function ist folgender:

Code:
$text = str_replace($bbcode,$htmlcode,$text);
return $text;
$bbcode ist ein array der bbcode elemente aus einer mysql datenbank und $htmlcode der entsprechende html text.

Aber das funktioniert nicht, zum Beispiel hatte ich einen Text und habe in die Datenbank ein Test bbcode eingefügt.

Code:
Der Text war ein toller dummy text der [FAT]hier fett geschrieben sein soll [/FAT]
[FAT] und [/FAT] stehen in der Datenbank -> ihnen werden jeweils <b> und </b> zugewiesen, was mache ich falsch?
Executor ist offline   Mit Zitat antworten
Alt 09.08.08, 20:27   #2 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

BB-Codes parsen ist - insbesondere wenn es dann auch noch um Verschachtelungen geht - weitaus weniger trivial, als du wahrscheinlich annimmst... und mit str_replace() ist man sowieso ein wenig eingeschränkt... du musst quasi schon voraussetzen, dass der User sauberen BB-Code schreibt, um später auch ein sauberes Ergebnis zu bekommen....

für BB-Code gibt es eine recht ausgereifte Parser-Klasse:
http://www.christian-seiler.de/projekte/php/bbcode/

schau dir die doch einfach mal an...
beavisbee ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 10.08.08, 00:27   #3 (permalink)
Themenstarter
 
Registriert seit: 10.08.06
Executor Leistung: Facit NTK
Likes: 0
Standard

ok ich danke dir, ich werds mir ma angucken
Executor ist offline   Mit Zitat antworten
Alt 10.08.08, 04:02   #4 (permalink)
 
Registriert seit: 26.03.08
moveax1 Leistung: Facit NTK
Likes: 0
Standard

Hi,

für solche Fälle sollte dir ereg_replace weiterhelfen. Schau dir mal folgenden Schnipsel an:

Code:
	function bb_FAT_replace($string)
	{
		$string = ereg_replace("\[FAT\]", "<b>", $string);
		$string = ereg_replace("\[\/FAT\]", "</b>", $string);
		return $string;
	}

	$entry = "hier gibt es auch [FAT]fetten[/FAT] Text";
	echo bb_FAT_replace($entry);
für den anderen Weg musst du nur noch die entgegengesätzten Fälle entwerfen.

Das ganze wird hier über Regular Expressions umgesetzt, daher müssen bestimmte Zeichen per Backslash escaped werden.
moveax1 ist offline   Mit Zitat antworten
Alt 10.08.08, 13:43   #5 (permalink)
Themenstarter
 
Registriert seit: 10.08.06
Executor Leistung: Facit NTK
Likes: 0
Standard

kann ich die expressions wie "\[FAT\]" auch in ne db schreiben und in ein array laden und dann abfragen?

weil sonst müsste ich ja für jeden ausdruck den ich verändern will den quellcode verändern.
Executor ist offline   Mit Zitat antworten
Alt 10.08.08, 14:02   #6 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

kannst du sicherlich auch... hier ist aber wieder ein ähnliches Problem wie bei deinem str_replace:

entweder du schreibst einen RegExp, der sauber überprüft, ob ein Anfangs- und ein End-Tag existieren
Nachteil: es wird verdammt hässlich mit Verschachtelung von BB-Codes

oder du schreibst das so, wie moveax1 geschrieben hat (dann kannst du aber genauso gut bei deinen str_replace bleiben)
Nachteil: du musst davon ausgehen, dass der Verfasser des Textes mit BB-Code auch wirklich sauberen BB-Code schreibt und alles was er öffnet wieder schließt, etc.
ansonsten wird eben ungültiger HTML-Code erzeugt, der dir dein ganzes Seiten-Layout versauen kann....
(wenn z.B. Tags geöffnet werden, aber nicht mehr geschlossen)

Daher mein Tipp mit dem BB-Code- PARSER, weil der auch Verschachtelungen und so problemlos mitmacht.

Denn wenn du nur mit str_replace arbeitest oder mit derartig einfachen RegExp's wie von moveax1 gepostet, dann kannst du genauso gut einfach mit EINEM regulären Ausdruck abfragen, dass nur bestimmte HTML-Tags erlaubt sind und alle HTML-Tags, die z.B. nicht <b>, <u> oder <i> sind sollen durch die Entities ersetzt werden (&lt;b&gt; etc.)
beavisbee ist offline   Mit Zitat antworten
Alt 10.08.08, 15:14   #7 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
entweder du schreibst einen RegExp, der sauber überprüft, ob ein Anfangs- und ein End-Tag existieren
Strenggenommen eigentlich nur bis zur einer bestimmten Tiefe möglich. Und die Tiefe wird man auch fest einkodieren müssen - iowas in der Art: "(BBcode_open zeichen* BBcode_close)" | ("BBcode_open zeichen* BBCode_open zeichen* BBCode_close zeichen* BBCode_close)"

Aber ein simpler Validierer ist imho nicht soo schwer:
pseudocode   

man braucht nur ein assoziatives Array mit Open-Close gültigen BB-Codes:
Code:
1.solange zeichen da sind -> lese_zeichen:
  wenn zeichen=Open_BB_Code push stack Entsprechender_Close_BB_Code
   wenn zeichen=Close_BB_Code  muss auch  pop stack=Close_BB_Code sein, sonst fehler
   wenn zeichen was anderes gehe zu 1.

keine_zeichen_da: ist stack nicht leer->fehler
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » BBCode schreiben
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[RegExp] BBCode - [code]-Blöcke rami (Web-) Design und webbasierte Sprachen 2 10.06.09 14:56
Buttons wie [B] oder [I] die den BBcode in eine Textarea eintragen reaLInsanity (Web-) Design und webbasierte Sprachen 11 11.06.07 08:10
schreiben in textarea Mana (Web-) Design und webbasierte Sprachen 4 20.05.07 20:31
BOT schreiben Fr33-Key Code Kitchen 10 22.03.06 18:39
My-SQL Table schreiben ô.O reaLInsanity (Web-) Design und webbasierte Sprachen 7 16.02.06 20:50


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61