Beat: danke

Beitrag lesen

Grüße,

relative urls sind dadurch nicht möglich.

ich wusste nciht, ass relative urls ein sicherheitsrisiko darstellen O_o verzicht wäre etwas schwer - da ich ja innerhalb der seite relativ addressiere.

Im Grunde ist ein isolierter BBCode in dieser Fassung auch für ein internes CMS so ungeeignet, denn es warnt dich nicht davor, wenn du Bockmist baust.

Jetzt schreibst du zum Beispiel:
[url:path/to/file][url:path/to/another/file]myfile[/url][/url]

es würde helfen, wenn ich aus der classe der erlaubten zeichen die klammern [] ausschließen könnte, aber  ([^[]].+) tut es nicht >_>

Ich nehme nochmals Perl:
Diesmal schliesse ich [] als gültige Zeichen aus.

Perl
$urlpat = qr/
       [
           url:
           (
             https?://     #anti XSS, Mache Schemavorgaben
             [^[]]+?
           )
       ]
          ([^[]]+?)
       [
           /url
       ]/x;

$string =~ s/$urlpat/<a href="$1" target="_blank">$2</a>/g;

Eine andere generelle Überlegung.
Schneller als man denkt, hat man eine Sprache erfunden, und leider schleichen sich Inkonsistenzen ein.
Was machst du mit Attributen, die du übergeben willst?

Mein (öffentlicher) BBCode sieht etwas anders aus:

<[url:http://example.com>[label:Beispiellink]]

Ich kann einer Funktion eine Anzahl Parameter mitgeben, die sowohl optional sind, und deren Reihenfolge auch egal ist.
Ich habe mich immer mehr hin zu einer Syntax bewegt, die für egal welche Form ein uniformes Prozedere aufweist.
Optionale Attribute: Wenn ich eine Funktion erweitere, wird bisheriger Code dadurch nicht invalide.
Reihenfolge der Optionen egal: Ich muss nicht in der Api nachschauen.
Alles was nicht einer Funktion angehört, wird ignoriert.

Beispiel: ich schreibe
<
   [url:http://example.com>
   [label:Beispiellink]
   [target:_blank]
]
target ist aber noch nicht implementiert. Es wird ignoriert.

Auslesen tu ich wie folgt:
Perl

my $bbc_options = qr/(?:[[a-z]+:.+?])*/;

$string = s/[link:\s*($bbc_options)\s*]/bbc_link($1)/eg;

sub bbc_link{
  #hier lese ich die Optionen schön aus
  # validiere sie, und/oder ersetze mit default
  # und gebe den Link zurück
}

Bevor du also daran gehst, die Authoring Hilfen zu basteln, mach dir Gedanken über eine allgemeine API, die dann aber beim Design jeder Funktion einhältst.

Mal als Gedankenanregung.

mfg Beat

--
><o(((°>    ----       ><o(((°>
   <°)))o><                      ><o(((°>o