• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

BBCode mit PHP parsen

Status
Für weitere Antworten geschlossen.

Rico de Amo

Neues Mitglied
Hallo würde gern auf meiner hp bbcode darstellen können. Dazu benötige ich allerdings, wie ich in Efahrung bringen konnte ein PHP script, dass diesen bbcode findet,ersetzt und neu darstellt
da ich nicht wirklich erfahrung damit habe bin ich auf dem Nullpunkt! Nun hoffe ich hier auf effizente Beiträge.

lg Rico:wink:

 
Zuletzt bearbeitet:
Werbung:
Hallo,

das geht mit Pattern Matching (preg_replace) über reguläre Ausdrücke.


z.b. für Text [/b ]:
PHP:
$text = "foo [b]bar[/b].";
$text = preg_replace ('#\[b](.*?)\[/b]#im', '<b>$1</b>', $text);

Kann sein, dass ich auf die schnelle jetzt nen Fehler im Code hab, musste ausprobieren.


N43
 
Kann sein, dass ich auf die schnelle jetzt nen Fehler im Code hab, musste ausprobieren.
Gilt bei mir auch ;-)
PHP:
<?
function bbcode ($entry) {
	$entry = eregi_replace("\n","<br>",$entry);
	$entry = eregi_replace("\[b\]([^\[]+)\[/b\]","<b>\\1</b>",$entry);
	$entry = eregi_replace("\[i\]([^\[]+)\[/i\]","<i>\\1</i>",$entry);
	$entry = eregi_replace("\[u\]([^\[]+)\[/u\]","<u>\\1</u>",$entry);
	$entry = eregi_replace("\[img\]([^\[]+)\[/img\]","<img src=\"\\1\" border=\"0\">",$entry);
	$entry = eregi_replace("\[mail\]([^\[]+)\[/mail\]","<a href=\"mailto:\\1\">\\1</a>",$entry);
	$entry = eregi_replace("\[url\]([^\[]+)\[/url\]","<a href=\"\\1\" target=\"_blank\">\\1</a>",$entry);
	$entry = eregi_replace("\[url=\"([^\"]+)\"]([^\[]+)\[/url\]","<a href=\"\\1\" target=\"_blank\">\\2</a>",$entry);
	return $entry; 
} 
?>
 
Werbung:
aus sicherheitsgründen kann ich von siesem script nur abraten, da du sonst ne schöne XSS lücke öffnest ^^ darum stelle ich dir hier meinen bbcode parser zur verfügung, ist n factory patern kannst du ganz leicht selber erstellen einfach von der abstracten factory ableiten und dann parsen und zwar in beide richtungen.

das gute an dem script ist, es ermöglicht dir deine bbcodes geparst zu speichern so das du sie nurnoch ausgeben musst das spart rechenleistung und wenn du den beitrag editieren willst einfach den geparsten text auslesen wieder durch den parser jagen, ändern und wiewder geparst speichern ^^

hier nu der aufbau des factory paterns ^^

PHP:
<?php

/**
 * this is an factory class example 
 *
 */

class BBCodeParserFactory extends BBCodeParserFactoryAbstract {
	
	public function createParser($type)
	{
		$parser = new BBCodeParser();
		
		switch($type) {
			case 'profile':
				break;
			case '*':
				$parser->addParser(new BBCodeCodesB());
				$parser->addParser(new BBCodeCodesI());
				$parser->addParser(new BBCodeCodesU());
				$parser->addParser(new BBCodeCodesImg());
				$parser->addParser(new BBCodeCodesUrl());
				$parser->addParser(new BBCodeCodesUrlExtended());
				$parser->addParser(new BBCodeCodesLeft());
				$parser->addParser(new BBCodeCodesRight());
				$parser->addParser(new BBCodeCodesCenter());
				$parser->addParser(new BBCodeCodesColor());
				$parser->addParser(new BBCodeCodesDel());
				break;
			default:
		}
		
		return $parser;
	}
}

sollte sich eigentlich von selbst erklären und der aufruf ist dann so

PHP:
$parser = BBCodeParserFactory::createParser('*'); // das * damit ich alle bbcodes bekomme
$text = $parser->parseText('hier dein [b]text[/b] und so');
// und wenn du da<s wieder rückgängig machen willst einfach
$parser->setMode(true);
$alter_text = $parser->parseText($text);
// um nun wieder in den normalen modus zu kommen einfach
$parser->setMode(false);

so nu viel spaß damit. :p
 

Anhänge

  • Codes.zip
    7,4 KB · Aufrufe: 15
Status
Für weitere Antworten geschlossen.
Zurück
Oben