Announcement

Collapse
No announcement yet.

Ein (für mich) komplexeres Problem mit BBCodes

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ein (für mich) komplexeres Problem mit BBCodes

    Guten Morgen zusammen!

    Habe gerade ein ziemliches Problem mit meiner selbstgeschriebenen BBCode-Klasse. Diese soll komplett XHTML 1.0 strict-konform sein. Um diese Konformität in jedem Fall zu gewährleisten, muss ich sicherstellen, dass im ausgegebenen HTML Inline-Elemente auf keinen Fall Block-Elemente Enthalten (bsp: &lt;span>&lt;div>...&lt;/div>&lt;/span> ist nicht konform). Dazu möchte ich "inline"-BBCodes, die "block"-BBCodes enthalten, schlicht löschen. Das erledigen soll die Methode "removeInlineBlock" aus meiner BBCode-Klasse, deren Source <a href="http://www.stalkernet.info/ruunv3/bbc_src.php">hier</a> zu finden ist.
    Die BBCode-Zeichenkette, die von dieser Funktion verarbeitet wird, wird vorher in der Methode parse durch folgendes Konstrukt gejagt:
    <pre>$string = nl2br(htmlspecialchars(trim($string)));</pre>
    Das Problem an dieser Vertrackten removeInlineBlock-Methode: sie hat keine Auswirkungen auf die BBCode-Zeichenkette, d.h. der Ausdruck extrahiert die Block-Elemente, die innerhalb von Inline-Elementen auftreten, nicht. Ich habe diesen Ausdruck sowohl mit 3 fehlerhaften BBCodes als auch mit 2 und einem getestet, und in keinem Fall scheint der Ausdruck das jeweils auftretende fehlerhafte Konstrukt, zum Beispiel
    <pre>
    1. ...
    </pre>
    für ersetzenswert zu erachten. Ich bin mit meinem Latein echt am Ende, was diese Funktion betrifft, und hoffe auf Hilfe der Mitglieder dieses Forums.

    (PS: PHP 4.3.10 läuft als apache 1.2-modul auf einem Linux-Rootserver)

    Gruß,
    Tobi

  • #2
    *zum komplett verwirren
    --------
    - ich hab' mich mal an diesem langgehangelt...
    und war kurz vor einem nervenzusammenbruch,
    aber vielleicht hilft es dir ja....
    --------

    function bb2html($text)
    {
    $bbcode = array("&lt;", "&gt;",
    "
    • ", "
    • ", "
    ",
    "[img]", "[/img]",
    "", "",
    "", "",
    "", "",
    '[color="', "[/color]",
    "[size=\"", "[/size]",
    '[url="', "[/url]",
    "[mail=\"", "[/mail]",
    "[code]", "[/code]",
    "[quote]", "[/quote]",
    '"]');
    $htmlcode = array("&lt;", "&gt;",
    "&lt;ul&gt;", "&lt;li&gt;", "&lt;/ul&gt;",
    "&lt;img src=\"", "\"&gt;",
    "&lt;b&gt;", "&lt;/b&gt;",
    "&lt;u&gt;", "&lt;/u&gt;",
    "&lt;i&gt;", "&lt;/i&gt;",
    "&lt;span style=\"color:", "&lt;/span&gt;",
    "&lt;span style=\"font-size:", "&lt;/span&gt;",
    '&lt;a href="', "&lt;/a&gt;",
    "&lt;a href=\"mailto:", "&lt;/a&gt;",
    "&lt;code&gt;", "&lt;/code&gt;",
    "&lt;table width=100% bgcolor=lightgray&gt;&lt;tr&gt;&lt;td bgcolor=white&gt;", "&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;",
    '"&gt;');
    $newtext = str_replace($bbcode, $htmlcode, $text);
    $newtext = nl2br($newtext);//second pass
    return $newtext;
    }
    ?&gt

    Comment


    • #3
      ach ja rausgekommen ist das...
      nicht besonders beeindruckend
      - aber mir hat es gereicht...
      - hat sogar einigermaßen funktioniert...

      function bbcodeHTML ($text)
      {

      $text = str_replace ('\"' , '"', $text);
      $text = str_replace ("\'" , "'", $text);

      $bbcode = array ("&lt;", "&gt;",
      "
      • ", "
      ",
      "[*]", "[/*]",
      '[img="',
      "", "",
      "", "",
      "", "",
      "
      ", "
      ",
      '[url=&quot;', '[url="', "[/url]",
      '[mail=&quot;', '[mail="', "[/mail]",
      "&quot;]", '"]', '[br]');

      $htmlcode = array ("&lt;", "&gt;",
      "\n&lt;ul&gt;\n", "\n&lt;/ul&gt;\n",
      "\n&lt;li&gt;", "&lt;/li&gt;\n",
      '&lt;img src="', "&lt;b&gt;",
      "&lt;/b&gt;", "&lt;u&gt;",
      "&lt;/u&gt;", "&lt;i&gt;",
      "&lt;/i&gt;","\n&lt;span class=\"quote\"&gt;\nquote: ",
      "\n&lt;/span&gt;\n",'&lt;a href="',
      '&lt;a href="', "&lt;/a&gt;",
      '&lt;a href="mailto:', '&lt;a href="mailto:',
      "&lt;/a&gt;",'"&gt;', '"&gt;',
      "\n&lt;br&gt;\n");

      $text = str_replace($bbcode, $htmlcode, $text);

      global $bbcodeHTML;
      $bbcodeHTML = $text;

      Comment

      Working...
      X