preg_replace für [var] ?

paulee

Erfahrenes Mitglied
Hallo!

Ich habe ein kleines /großes Problem: Ich bin dabei ein cms für eine firma zu programmieren, nun bin ich beim Kernstück - dem Texteditor - angelangt. In den Texten kommen interaktive Inhalte an verschiedenen Stellen vor. FLV Videos etc., ich möchte aber jedes FLV- Video (o.a.) individuell steuern können.
Deshalb habe ich mir überlegt bbcode zu verwenden bzw. eine ähnliche Methode, um die Videos an bestimmten stellen anzeigen zu lassen.

Syntax sollte so ausehen:
[flv]height:300,width:600,src:video.flv[/flv]

Ich habe mir gedacht, dass ich dies so auflösen könnte in einem Text:
Prima luce, cum summus mons a Labieno teneretur, ipse ab hostium castris non longius mille et quingentis passibus abesset neque, ut [flv]height:300,width:600,src:video.flv[/flv] postea ex captivis comperit, aut ipsius adventus aut Labieni cognitus esset

Habe zuerst mit regex_replace gearbeitet, bin aber nur soweit gekommen, dass das Tag [flv] erkannt wird und der inhalt ausgegeben wird --> [flv]video.flv[/flv] ...das war schon ein großer Fortschritt.

PHP:
$bb = preg_replace('/\[flv\](.*?)\[\/flv\]/ise', 'flv_include("$1")', $bb);

Ich möchte aber Eigenschaften einem eingesetzten Objekt zuweisen ... height:300 , ... usw. und das mir das ausgegeben wird ... könnt ihr mir da weiterhelfen?

Vielen Dank!
 
Hallo @paulee

Wenn es sich um viele Attribute handelt, die keiner besonderen Reihenfolge unterliegen und ausgelassen werden dürfen, dann würde ich es so machen:

PHP:
preg_match_all('/\[flv(.*?)\](.*?)\[\/flv\]/ise', $bb, $matches);

$c_matches = count($matches[0]);

for($i = 0; $i < $c_matches; $i++)
 {

   preg_match_all('/(\w*)\=\"(.*?)\"/ise', $c_matches[1][$i], $att);
   

 } // END for

  // att[1] hat dann das Attribut
  // att[2] den Wert


BEVORZUGT:
Wenn die Attribute gleich heißen wie die Attribute dann im HTML, dann kopier doch den String einfach aus dem [flv] container und füg ihn direkt im HTML ein:

PHP:
$bb = preg_replace('/\[flv(.*?)\](.*?)\[\/flv\]/ise', 'flv_include("$2", "$1")', $bb);


Und wenn es sich wirklich nur um zwei parameter handelt, die ohnehin immer da sind:
PHP:
$bb = preg_replace('/\[flv width\=\"(.*?)\" height\=\"(.*?)\"\](.*?)\[\/flv\]/ise', 'flv_include("$3", "$1", "$2")', $bb);


Grüße Simon
 
Zurück