Hallo,
ich erlaube in meiner Software das Erstellen von eigenen BB-Codes, z.B. könnte ein Nutzer den BB-Code [bgcolor=#ff9900]Oranger Text[/bgcolor] haben wollen. Der Code den der Administrator dann anlegt, sieht in etwa so aus: [bgcolor={option}]{param}[/bgcolor]. Alles soweit kein Problem und auch bereits längere Zeit implementiert. Hier ein Ausschnitt aus dem Parser:
Nun zum Problem der derzeitigen Implementation: Es ist möglich vom User z.B. folgende Eingabe zu erhalten: [bgcolor=#ff9900;float:left]Text[/bgcolor]. Das ist ja nun nicht wirklich Sinn der Sache und stellt in meinen Augen auch ein Risiko dar (<, ", ' und > sind hingegen nicht möglich. Wäre ja noch schöner...). Da ich nun aber nicht auch noch generell das ; sperren kann (wo bliebe sonst die Universalität), muss eine andere Lösung her.
Mein Vorschlag wäre dieser:
Anstatt der Platzhalter {option} und {param} erstelle ich Platzhalter wie {hex:1}, {text:1}, {number:1}, {url:2} und von mir aus auch {[a-z;0-9_]+:5}. Der Teil vor dem Doppelpunkt würde dann dem Typ der Validierung entsprechen und der Teil danach der eindeutigen Zahl des Parameters (damit später exakt bekannt ist, was mit was ersetzt wird). Ob ich nun reguläre Ausdrücke zulasse, ist dabei ein weiterer Diskussionspunkt. Ich sehe dabei nur das Problem, dass ich (ohne reguläre Ausdrücke) kaum oder nur schwer alle möglichen bzw. gewünschten Muster abbilden kann. Außerdem würde sich natürlich die Spezifikation zur Erstellung von solchen BB-Codes ändern, d.h. alle vorher erstellten Codes werden ungültig, was jetzt natürlich das kleinere Elend wäre.
Was meint ihr dazu und/oder habt ihr bessere Vorschläge?
Würde mich über Antworten freuen.
Mit freundlichen Grüßen
MaMo
ich erlaube in meiner Software das Erstellen von eigenen BB-Codes, z.B. könnte ein Nutzer den BB-Code [bgcolor=#ff9900]Oranger Text[/bgcolor] haben wollen. Der Code den der Administrator dann anlegt, sieht in etwa so aus: [bgcolor={option}]{param}[/bgcolor]. Alles soweit kein Problem und auch bereits längere Zeit implementiert. Hier ein Ausschnitt aus dem Parser:
PHP-Code:
// ...
function customBB ($text) {
foreach ($this->custom as $re) {
$param = ($re['twoparams'] ? '=([^\]\'\"]*?)' : ''); // Paramter for Opening Tag
$regexp = '\['.$re['bbcodetag'].$param.'\]'; // Opening Tag
$regexp .= '(.+?)'; // Getting content
$regexp .= '\[\/'.$re['bbcodetag'].'\]'; // Closing Tag
$text = preg_replace('~'.$regexp.'~is', $re['bbcodereplacement'], $text);
}
return $text;
}
// ...
Mein Vorschlag wäre dieser:
Anstatt der Platzhalter {option} und {param} erstelle ich Platzhalter wie {hex:1}, {text:1}, {number:1}, {url:2} und von mir aus auch {[a-z;0-9_]+:5}. Der Teil vor dem Doppelpunkt würde dann dem Typ der Validierung entsprechen und der Teil danach der eindeutigen Zahl des Parameters (damit später exakt bekannt ist, was mit was ersetzt wird). Ob ich nun reguläre Ausdrücke zulasse, ist dabei ein weiterer Diskussionspunkt. Ich sehe dabei nur das Problem, dass ich (ohne reguläre Ausdrücke) kaum oder nur schwer alle möglichen bzw. gewünschten Muster abbilden kann. Außerdem würde sich natürlich die Spezifikation zur Erstellung von solchen BB-Codes ändern, d.h. alle vorher erstellten Codes werden ungültig, was jetzt natürlich das kleinere Elend wäre.
Was meint ihr dazu und/oder habt ihr bessere Vorschläge?
Würde mich über Antworten freuen.
Mit freundlichen Grüßen
MaMo
Kommentar