ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
1443
1443
EMPFEHLEN
-
Einen schönen guten Morgen,
ich hab in meinem HTMLCode folgende Platzhalter definiert:
Code :1
[plugin]ViewArticle[/plugin]
Jetzt möchte ich, das PHP den Platzhalter sucht und durch einen include() Befehl ersetzt, das klappt auch soweit ganz gut in meiner Templateklasse:
Nur parst er den Code nicht?PHP-Code:$bbcode = new BBCodeParser();
$bbcode->addExtraBBCode("plugin", "/\[plugin\](.*)\[\/plugin\]/isU", "<?php include'$1.php';?>");
$text = $bbcode->Parser($text);
Im Quelltextmodus vom FF wird der PHPCode rosa angezeigt.
Wie bringe ich PHP dazu, das er den Code parst?
Gruß und einen schönen Samstag wünscht euch,
solar22
-
Welcher Code wird nicht geparst?
Außerdem solltest du etwas mehr code zeigen, denn der Interessante Teil fehlt (wo die Funktion im Kontext steht usw.)
Mit eval kann man PHP-Code ausführen, auch wenn ein String bereits geparst wurde (Stichwort.: Ausgabepuffer)There are only 10 types of people in the world — those who understand binary, and those who don't.
Mach mal einer das Licht an, ich hör nix!
Why is 6 afraid of 7? Because 7 8 9.
-
Hallo,
entschuldige die späte Antwort -> Schule.
Momentan nutze ich noch diesen BBCode Parser:
Aus der mySQL DB wird der Inhalt der Seite gelesen, zB:PHP-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;
}
}
?>
Code :1 2 3
Hallo ich bin <b>Peter</b>,<br/> hier ein paar News von mir: <br /> [plugin]ViewArticle[/plugin]
Nun soll, das [plugin]ViewArticle[/plugin] durch ein <?php include 'plugins/ViewArticle.php'; ?> ersetzt werden.
Klappt auch soweit ganz gut, nur parst er das ganze nicht.
Die TPL Engine ist recht simpel, also kein Smarty oder so.Geändert von solar22 (23.03.10 um 16:50 Uhr)
Gruß.
solar22
-
Mit dem bbcode parser kannst du das eher nicht lösen da der parser nur bbcode elemente in html elemente umwandelt und du willst ja ein PHP-File einbinden.
Ein Include bedeuted das die datei auch an der stelle ausgeführt wird. In deinem Beispiel sollte das einen Fehler erzeugen.
Du wirst wohl um einen eigenen Parser nicht herumkommen.
Dazu brauchst du preg_match() und ziehst dir den Pluginnamen heraus.
Mit dem kannst du dann an gewünschter Stelle deine PHP-File einbinden.Google und die Forensuche beantworten 50% aller Fragen!
Pflichtlektüre: Das PHP Handbuch als Windows Help Datei
Bitte Benutzt für Source-Code immer die richtigen Formatierungstags:
[PHP]Für PHP diese Tags[\PHP] ... [HTML]Für HTML diese Tags[\HTML] ... [SQL]Für SQL diese Tags[\SQL] ... [CODE]Für sonstigen Code[\CODE]
Wenn mein Beitrag hilfreich war bitte ich um eine positive Bewertung.
-
Nun, ich hab jetzt mal das hier geschrieben, anstatt der BBCoder Parser Geschichte:
Trotzdem wird das ganze nicht geparst.PHP-Code:$text = preg_replace('/\[plugin\](.*?)\[\/plugin\]/', "<?php include'\1.php'; ?>", $text);
Die Frage, die ich mir stelle, wie bekomm ich PHP nun dazu, das er den Code mit parst?Gruß.
solar22
-
23.03.10 17:39 #6
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Du schreibst ganz oben das du im HTML Code einen Platzhalter definiert hast. Bedeutet das auch das die Datei die Endung HTML hat? Dann kann PHP nicht geparst werden.
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Mh du solltest meinen Beitrag ganz lesen....
Ein Include führt die PHP-File an exakt der Stelle aus wo du den Include hinschreibst....
Das ist wie als ob du den gesamten Inhalt kopierst und statt <?php include'\1.php'; ?> einfügst.
Es kann also so nicht gehen.
Wie schon oben beschrieben hole dir den Plugin Namen und setze dein Include an die richtige Stelle.Geändert von Da_Chris (23.03.10 um 17:55 Uhr)
Google und die Forensuche beantworten 50% aller Fragen!
Pflichtlektüre: Das PHP Handbuch als Windows Help Datei
Bitte Benutzt für Source-Code immer die richtigen Formatierungstags:
[PHP]Für PHP diese Tags[\PHP] ... [HTML]Für HTML diese Tags[\HTML] ... [SQL]Für SQL diese Tags[\SQL] ... [CODE]Für sonstigen Code[\CODE]
Wenn mein Beitrag hilfreich war bitte ich um eine positive Bewertung.
-
Der HTML Code wird dynamisch aus einer mysql Tabelle geladen.
Der Platzhalter soll dann ersetzt werden und dann geparst werden.Gruß.
solar22
-
@Da_Chris
Der include soll auch genau da ausgeführt werden, wo der Platzhalter steht.
Und der php include() wird ja auch korrekt umgewandelt.
Diesen Teil versteh ich nicht.Das ist wie als ob du den gesamten Inhalt kopierst und statt <?php include'\1.php'; ?> einfügst.
Es kann also so nicht gehen.
Wie gesagt, er macht schon aus
das hier:HTML-Code:[plugin]ViewArticle[/plugin]
<?php include 'plugins/ViewArticle.php'; ?>Gruß.
solar22
-
Ich seh grad ich hab deinen Code nicht ganz genau angesehen.
Du hast ja "" um deine Include Anweisung gepackt.
Dann sieht die Sache anders aus (aber leider immer noch nicht richtig)
Was bei dir passiert er schreibt die include anweisung in deinen html code.
Ich weis nicht wie du die Ausgabe machst aber damit es funktioniert müsstest du die Ausgabe des geänderten html codes in eval() packen.
AlsoPHP-Code:eval($text);
Google und die Forensuche beantworten 50% aller Fragen!
Pflichtlektüre: Das PHP Handbuch als Windows Help Datei
Bitte Benutzt für Source-Code immer die richtigen Formatierungstags:
[PHP]Für PHP diese Tags[\PHP] ... [HTML]Für HTML diese Tags[\HTML] ... [SQL]Für SQL diese Tags[\SQL] ... [CODE]Für sonstigen Code[\CODE]
Wenn mein Beitrag hilfreich war bitte ich um eine positive Bewertung.
-
Mh, an eval(); hab ich auch schon gedacht.
Aber er liest ja nicht nur PHP Code aus der DB.
Und würd ich aus allem HTML ein echo machen, wäre eval ja auch ein Sicherheitsloch und würde des Parser unsinnig belasten.Gruß.
solar22
-
Google und die Forensuche beantworten 50% aller Fragen!
Pflichtlektüre: Das PHP Handbuch als Windows Help Datei
Bitte Benutzt für Source-Code immer die richtigen Formatierungstags:
[PHP]Für PHP diese Tags[\PHP] ... [HTML]Für HTML diese Tags[\HTML] ... [SQL]Für SQL diese Tags[\SQL] ... [CODE]Für sonstigen Code[\CODE]
Wenn mein Beitrag hilfreich war bitte ich um eine positive Bewertung.
-
Hallo,
ich hab das ganze nun so gelöst:
Ich danke für den Tipp mit den callback!PHP-Code:if(preg_match('/\[plugin\](.*?)\[\/plugin\]/', $text)) {
preg_match_all('/\[plugin\](.*?)\[\/plugin\]/', $text,$plugins);
$plugins = $plugins[1];
$i = 0;
do {
require_once("application/plugins/$plugins[$i].php");
$content = $plugins[$i]();
$text = preg_replace("/\[plugin\]$plugins[$i]\[\/plugin\]/", $content, $text);
$i++;
} while($i < count($plugins));
}
Darüber bin ich auf die Lösung gekommen
Danke.Gruß.
solar22
-
Hatte ich zwar ein wenig anders im Sinn aber wenn es geholfen hat gern geschehen
Google und die Forensuche beantworten 50% aller Fragen!
Pflichtlektüre: Das PHP Handbuch als Windows Help Datei
Bitte Benutzt für Source-Code immer die richtigen Formatierungstags:
[PHP]Für PHP diese Tags[\PHP] ... [HTML]Für HTML diese Tags[\HTML] ... [SQL]Für SQL diese Tags[\SQL] ... [CODE]Für sonstigen Code[\CODE]
Wenn mein Beitrag hilfreich war bitte ich um eine positive Bewertung.
Ähnliche Themen
-
Platzhalter durch PHP-Code ersetzen
Von Aragon83 im Forum PHPAntworten: 9Letzter Beitrag: 24.09.09, 20:10 -
Platzhalter in IFRAME ersetzen.
Von Marky-1 im Forum PHPAntworten: 0Letzter Beitrag: 09.09.08, 12:38 -
unbekannte Anzahl unbekannter Platzhalter ersetzen
Von Kaldorias im Forum PHPAntworten: 2Letzter Beitrag: 02.11.07, 14:41 -
Tool: Ersetzen mit Platzhalter (wie in phpmyadmin)
Von DerUnsympath im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 26.05.07, 16:42 -
Platzhalter ersetzen
Von liquidbeats im Forum Flash PlattformAntworten: 1Letzter Beitrag: 07.10.05, 09:51





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren