Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Probleme mit der StringParser_BBCode-Klasse

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Probleme mit der StringParser_BBCode-Klasse

    Ich habe das Beispiel genommen und zwei weiteren Tags erweitert. Und zwar [size] und [align] wenn ich jetzt einen von den beiden verwende wird z.B. ein [b] innerhalb von den beiden neuen nicht umgewandelt.

    Kann mir einer sagen was ich falsch mache?

    Oder kennt jemand einen andern BBCode umwandler den ich verwenden könnte?

    PHP-Code:
    <?PHP
    function convertlinebreaks ($text) {
        return 
    preg_replace ("/\015\012|\015|\012/""\n"$text);
    }

    // Alles bis auf Neuezeile-Zeichen entfernen
    function bbcode_stripcontents ($text) {
        return 
    preg_replace ("/[^\n]/"''$text);
    }

    function 
    do_bbcode_url ($action$attributes$content$params$node_object) {
        if (!isset (
    $attributes['default'])) {
            
    $url $content;
            
    $text htmlspecialchars ($content);
        } else {
            
    $url $attributes['default'];
            
    $text $content;
        }
        if (
    $action == 'validate') {
            if (
    substr ($url05) == 'data:' || substr ($url05) == 'file:'
              
    || substr ($url011) == 'javascript:' || substr ($url04) == 'jar:') {
                return 
    false;
            }
            return 
    true;
        }
        return 
    '<a href="'.htmlspecialchars ($url).'">'.$text.'</a>';
    }
    function 
    do_bbcode_algin ($action$attributes$content$params$node_object) {
         if (
    $action == 'validate') {
            if (
    substr ($url05) == 'data:' || substr ($url05) == 'file:'
              
    || substr ($url011) == 'javascript:' || substr ($url04) == 'jar:') {
                return 
    false;
            }
            return 
    true;
        }
        return 
    '<div align="'.htmlspecialchars ($attributes['default']).'">'.htmlspecialchars ($content).'</div>';
    }
    function 
    do_bbcode_size ($action$attributes$content$params$node_object) {
         if (
    $action == 'validate') {
            if (
    substr ($url05) == 'data:' || substr ($url05) == 'file:'
              
    || substr ($url011) == 'javascript:' || substr ($url04) == 'jar:') {
                return 
    false;
            }
            return 
    true;
        }
        return 
    '<span style="font-size:'.htmlspecialchars ($attributes['default']).'px">'.htmlspecialchars ($content).'</span>';
    }
    // Funktion zum Einbinden von Bildern
    function do_bbcode_img ($action$attributes$content$params$node_object) {
        if (
    $action == 'validate') {
            if (
    substr ($content05) == 'data:' || substr ($content05) == 'file:'
              
    || substr ($content011) == 'javascript:' || substr ($content04) == 'jar:') {
                return 
    false;
            }
            return 
    true;
        }
        return 
    '<img src="'.htmlspecialchars($content).'" alt="">';
    }
    require_once 
    'stringparser_bbcode.class.php';
    $bbcode = new StringParser_BBCode ();
    $bbcode->addFilter (STRINGPARSER_FILTER_PRE'convertlinebreaks');
    $bbcode->addParser (array ('block''inline''link''listitem'), 'htmlspecialchars');
    $bbcode->addParser (array ('block''inline''link''listitem'), 'nl2br');
    $bbcode->addParser ('list''bbcode_stripcontents');
    $bbcode->addCode ('b''simple_replace'null, array ('start_tag' => '<b>''end_tag' => '</b>'),
                      
    'inline', array ('listitem''block''inline''link'), array ());
    $bbcode->addCode ('i''simple_replace'null, array ('start_tag' => '<i>''end_tag' => '</i>'),
                      
    'inline', array ('listitem''block''inline''link'), array ());
    $bbcode->addCode ('url''usecontent?''do_bbcode_url', array ('usecontent_param' => 'default'),
                      
    'link', array ('listitem''block''inline'), array ('link'));
    $bbcode->addCode ('align''usecontent''do_bbcode_algin', array ('usecontent_param' => 'default'),
                      
    'inline', array ('block''inline''link'), array ());
    $bbcode->addCode ('size''usecontent''do_bbcode_size', array ('usecontent_param' => 'default'),
                      
    'inline', array ('listitem''block''inline''link'), array ());                  
    $bbcode->addCode ('link''callback_replace_single''do_bbcode_url', array (),
                      
    'link', array ('listitem''block''inline'), array ('link'));
    $bbcode->addCode ('img''usecontent''do_bbcode_img', array (),
                      
    'image', array ('listitem''block''inline''link'), array ());
    $bbcode->addCode ('bild''usecontent''do_bbcode_img', array (),
                      
    'image', array ('listitem''block''inline''link'), array ());
    $bbcode->setOccurrenceType ('img''image');
    $bbcode->setOccurrenceType ('bild''image');
    $bbcode->setMaxOccurrences ('image'2);
    $bbcode->addCode ('list''simple_replace'null, array ('start_tag' => '<ul>''end_tag' => '</ul>'),
                      
    'list', array ('block''listitem'), array ());
    $bbcode->addCode ('*''simple_replace'null, array ('start_tag' => '<li>''end_tag' => '</li>'),
                      
    'listitem', array ('list'), array ());
    $bbcode->setCodeFlag ('*''closetag'BBCODE_CLOSETAG_OPTIONAL);
    $bbcode->setCodeFlag ('*''paragraphs'true);
    $bbcode->setCodeFlag ('list''paragraph_type'BBCODE_PARAGRAPH_BLOCK_ELEMENT);
    $bbcode->setCodeFlag ('list''opentag.before.newline'BBCODE_NEWLINE_DROP);
    $bbcode->setCodeFlag ('list''closetag.before.newline'BBCODE_NEWLINE_DROP);
    $bbcode->setRootParagraphHandling (true);
    ?>


  • #2
    Fortgeschritten? Doch nicht ernsthaft, oder?
    1. Deine Callbacks validieren nicht vorhandene URLs völlig unnützer weise. Die müssten Deine Zahl validieren. Außerdem
    2. Du verwendest als Ersetzungstyp "usecontent". Darin werden nunmal keine weiteren Ersetzungen vorgenommen. Steht doch auch so in der Anleitung
    3. Dein usecontent_param ist da in der Form reichlich witzfrei. Der Text zwischen den Tags soll doch nie und nimmer in die Attribute Deiner HTML-Tags wandern.


    Mag mal bitte ein Mod verschieben? (Wo auch immer sowas hier hin passen mag)

    Gruß Jens

    Kommentar


    • #3
      Kann mir einer sagen was ich falsch mache?
      Kannst Du uns Deine vorgenommenen Schritte zur Fehleranalyse schreiben?

      [MOD: verschoben]
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Entschuldigt ich mache leraning bei Doing. Jeder habe wie ihr sicherlich gemerkt habt bei der Klasse keinen Plan.

        Wie schon geschrieben ist es das Beispiel von StringParser_BBCode-Klasse Seite.
        Ich probiere da noch algin und size rein zubekommen. - ohne das ich das bis jetzt richtig verstehe.

        PHP-Code:
        $bbcode->addCode ('align''callback_replace''do_bbcode_align', array (),
                          
        'inline', array ('block''inline''link'), array ());
        $bbcode->addCode ('size''callback_replace''do_bbcode_size', array (),
                          
        'inline', array ('listitem''block''inline''link'), array ()); 
        ok usecontent ist wohl völlig falsch, ich habe es jetzt mit callback_replace versucht.

        das:
        Code:
        [-size=20]Hallo dies ist die erste News die ich [-b]schreibe[-/b] also nur ein test[-/size]
        Die größe macht er den b Tag macht er dann nicht. Er wird in &lt;b&gt; ausgeben.

        Code:
        Hallo dies ist die erste News die ich -[b]schreibe[-/b] also nur ein test
        hier wird der b Tag richtig ausgeben.

        PS das - im den Tags bitte weg denken.

        Kommentar


        • #5
          Ohne die Klasse zu kennen, lässt sich vermuten, dass man hiermit
          array ('listitem', 'block', 'inline', 'link')
          die erlaubte Sub- oder Elternelemente angeben kann. Da fehlt Dein b dann vermutlich.
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Zitat von nikosch Beitrag anzeigen
            Ohne die Klasse zu kennen, lässt sich vermuten, dass man hiermit
            die erlaubte Sub- oder Elternelemente angeben kann. Da fehlt Dein b dann vermutlich.
            nee leider nicht b ist als inline definiert

            Kommentar


            • #7
              ah ich habe es geschaft.

              Kommentar

              Lädt...
              X