Internet, Soft- & Hardware, Erfahrungsberichte, PHP. Unsere Artikel zum digitalen Leben.
Erweiterte/Flexible PHP BBCode Klasse
Guten Morgen
Nach meiner ersten, meiner Meinung nach, etwas missratenen “einfachen” PHP BBCode Klasse, wollte ich diese etwas erweitern und verbessern. Dies habe ich erreicht, indem man nun eigene BBCodes in den Parser laden kann, was die ganze Klasse flexibler gestaltet. Außerdem hab ich die alten Klassenstruktur etwas verändert, obwohl ich mit der aktuellen auch nicht richtig zufrieden bin. Aber es sollte ja nur ein “Upgrade” für die alte PHP BBCode Klasse sein und keine “Neuentwicklung”. Genug geredet hier ist sie, wie immer schlecht dokumentiert:
Erweiterte/Flexible PHP BBCode Klasse(Code)
<?php
class BBCodeParser
{
private $BBCodesDefault="";
private $BBCodesExtra="";
private $rawText;
public function __construct()
{
if(!isset($this->BBCodesDefault) OR !isset($this->BBCodesExtra))
{
trigger_error("Es fehlen wichtige Variablen! Bitte kontrollieren Sie die Klasse.");
}
$this->addDefaultBBCodes();
}
private function addDefaultBBCodes()
{
$this->BBCodesDefault = array("b" => array("/\[b\](.*)\[\/b\]/isU" => "<b>$1</b>"),
"i" => array("/\[i\](.*)\[\/i\]/isU" => "<i>$1</i>"),
"url" => array("/\[url\=(.*)\](.*)\[\/url\]/isU" => "<a href=\"$1\">$2</a>"),
"youtube" => array("/\[youtube\](.*)\[\/youtube\]/isU" => "<object width=\"560\" height=\"340\"><param name=\"movie\" value=\"http://www.youtube.com/v/$1\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/v/$1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"560\" height=\"340\"></embed></object>"),
"img" => array("/\[img\](.*)\[\/img\]/isU" => "<img src=\"$1\" alt=\"\" title=\"\" />"));
}
public function addExtraBBCode($name, $bbCodePattern, $htmlCodePattern)
{
if(!isset($this->BBCodesExtra[$name]))
{
$this->BBCodesExtra[$name] = array($bbCodePattern => $htmlCodePattern);
}
else
{
trigger_error("BBCodename existiert bereits");
}
}
private function parseExtraCode()
{
if(!is_array($this->BBCodesExtra)) return $this->rawText;
foreach($this->BBCodesExtra as $BBCode => $array)
{
foreach($array as $BBCodePattern => $htmlPattern)
{
$this->rawText = preg_replace($BBCodePattern, $htmlPattern, $this->rawText);
}
}
return $this->rawText;
}
private function iniParse($rawText)
{
$this->rawText = $rawText;
foreach($this->BBCodesDefault as $BBCode => $array)
{
if(stripos($this->rawText, "[".$BBCode."]") !== FALSE && stripos($this->rawText, "[/".$BBCode."]") !== FALSE)
{
return true;
}
continue;
}
if(is_array($this->BBCodesExtra))
{
foreach($this->BBCodesExtra as $BBCode => $array)
{
if(stripos($this->rawText, "[".$BBCode."]") !== FALSE && stripos($this->rawText, "[/".$BBCode."]") !== FALSE)
{
return true;
}
continue;
}
}
return false;
}
private function parseCode()
{
if($this->rawText == "")
{
trigger_error("Diese Funktion muss erst durch iniParse() initialisert werden!");
}
foreach($this->BBCodesDefault as $BBCode => $array)
{
foreach($array as $search => $html)
{
$this->rawText = preg_replace($search, $html, $this->rawText);
}
}
return $this->rawText;
}
public function Parser($rawText)
{
//$this->rawText = htmlentities($rawText);
if(!$this->iniParse($rawText)) return $this->rawText;
$this->parseCode();
$this->parseExtraCode();
return $this->rawText;
}
}
?>
Eine Demo gibt es hier zu sehen: DEMO. Obwohl man natürlich nur den geparsten Text sehen kann, also bringt es nicht viel.
Erweiterte/Flexible PHP BBCode Klasse – DEMO(Code)
<?php
include_once("./BBCode2.class.php");
// Parser wird initialisiert
$bbcode = new BBCodeParser();
//Test mit BBCode
$text = "[URL=http://php-friends.de]PHP-Friends[/URL][I][B]Text[/B][B]Text2[/B][/I][youtube]gUeeIjyI7QQ[/youtube]<br />";
// Text ohne BBCode
$text2 = "ABC<br />";
// Eigenen BBCode einfügen
$bbcode->addExtraBBCode("h1", "/\[h1\](.*)\[\/h1\]/isU", "<h1>$1</h1>");
// Wird der eigene BBCode geparst?
$text3 = "[h1]Marvin[/h1]";
//Ausgabe
echo $bbcode->Parser($text3);
echo $bbcode->Parser($text2);
echo $bbcode->Parser($text);
?>
Bei Anregungen und/oder Kritik bitte das Kommentarsystem nutzen; E-Mail ist natürlich auch okay.
| Artikel drucken | Dieser Beitrag wurde von Marvin Strauch am 27. November 2009 um 13:09 veröffentlicht und unter PHP abgelegt. Du kannst allen Antworten zu diesem Beitrag durch RSS 2.0 folgen. Du kannst eine Antwort schreiben oder einen Trackback von deiner eigenen Seite hinterlassen. |
vor 4 Monaten
Wenn man den Code durchschaut und PHP relativ gut versteht, dann kommt man schnell dahinter, dass dies ein Tool für Youtube sein soll. In ähnlicher Funktionalität habe ich soetwas als WordPressplugin. Hier wird eine Youtube-URL erkannt und das Video automatisch als Objekt eingebettet. Genauso etwas erkenne ich bei der vorgestellten Klasse.
In meinen Augen ist es gar nicht nötig extra [youtube] oder [video] einer URL noch extra mitgeben zu müssen. Wenn ein Youtubevideo automatisch erkannt und als Objekt eingebettet wird, erhöht dies auch die Benutzerfreundlichkeit.
vor 4 Monaten
Habe ich das jetzt folgendermaßen richtig verstanden:
Ein Youtubelink wird erkannt und ohne die Tags wie z.B. “[youtube]” und “[video]” als Objekt eingebettet?
vor 3 Monaten
Sorry. Does somebody know how to choose a real Forex EA from bad and a real signal from fake? big thanks
vor 3 Monaten
Looking for the best house projects 2009