Thread Verfasser: Rolly8-HL
Thread ID: 1312
Thread Info
Es gibt 10 Beiträge zu diesem Thema, und es wurde 5150 Mal angesehen.  Ausserdem wurden Dateien angehängt.
 Thema drucken
Parse bbcode
Rolly8-HL
Hallo, habe da mal eine Frage zu Parse bbcode.
Ich möchte den BBCode code benutzen mit einem Inhalt von einem BBCode.
Das soll bedeuten das der BBCode den ich darstellen möchte auch in Reinschrift ausgegeben werden soll, also mit BBCode Anfang & Ende.
Nur in der Ausgabe im BBCode code erscheint der BBCode durch function parseubb jetzt geparst, also ohne den BBCode Anfang & Ende.

Wie kann man das abstellen, denn wenn ich etwas darstellen will und es wird anders dargestellt dann hat das kein Zweck es so zu nutzen.
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Du bräuchtest einen neuen BB Code, der erstens an erster Stelle steht und zweitens dafür sorgt, dass die Schleife in parseubb sofort im Anschluss verlassen wird, um keine weiteren Replaces zu durchlaufen
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Rolly8-HL
Das habe ich jetzt nicht ganz verstanden, was für eine BBC den noch?
Dafür ist doch schon die !autolink_bbcode_include für Zuständig.

      function bbcode_off($text, $part) {
         if ($part == 1) {
            $text = str_replace("[", " [", $text);
            $text = str_replace("]", "] ", $text);
         } elseif ($part == 2) {
            $text = preg_replace('^<a href="(.*?)" target="_blank" title="autolink">(.*?)</a>^si', '\1', $text);
            $text = str_replace(" &#91;", "&#91;", $text);
            $text = str_replace("&#93; ", "&#93;", $text);
         }
         return $text;
      }

      function autolink_callbackPreCode($matches) {
         return '[code]'.bbcode_off($matches[1], 1).'
';
}

function autolink_callbackPostCode($matches) {
return '

'.bbcode_off($matches[1], 2).'
';
}
[/code]
Hab festgestellt das damit dieses Problem bei mir mit behoben ist wenn es sich um den BBC code handelt.

Nur mit geshi geht es trotzdem nicht auch wenn es dort drin steht.

      function autolink_callbackPreGeshi($matches) {
         return '[geshi='.$matches[1].']'.bbcode_off($matches[2], '1').'[/geshi]';
      }

      function autolink_callbackPostGeshi($matches) {
         return '[geshi='.$matches[1].']'.bbcode_off($matches[2], 2).'[/geshi]';
      }


Ps. Nachtrag: Wie man sehen kann bringt selbst auf dieser Seite das alles durcheinander und der Inhalt der BBC code kann nicht richtig dargestellt werden.
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Ich hab das doch richtig verstanden:
Du suchst nach einer Möglichkeit, anderen zu zeigen was sie unter Verwendung von BB-Codes eintippen müssen? So dass also die BB-Codes nicht umgewandelt sondern so gezeigt werden wie derjenige sie eingeben muss?

Dein Code aus der !autolink ist schon mal im Ansatz nicht verkehrt.

Darin sind genau die Elemente vorhanden die du brauchst:

$text = str_replace("[", " &#91;", $text);
$text = str_replace("]", "&#93; ", $text);
Wandelst du den String also vorab mit diesen beiden Zeilen um, wird enthaltener BB-Code nicht mehr ersetzt.

Wenn du nun vorhast, für diese Funktionalität einen neuen BBC (z.B. "bbdemo") zu erstellen, lässt du damit einfach alle eckigen Klammern des enthaltenen Strings umwandeln.
Da auf diese Weise

[ geshi=php] <?php phpinfo(); ?>[ /geshi]
in

&# 91;geshi=php&#93; <?php phpinfo(); ?>&# 91;/geshi&# 93;
gewandelt wird, ist keine Übereinstimmung für die nachfolgende Ersetzung mit BB-Codes mehr vorhanden, aber der Browser stellt es beim Betrachten korrekt wieder mit eckigen Klammern dar.

Um zu verhindern dass ein anderer BBC bereits Umwandlungen vorgenommen hat, muss dein neuer BBC vor allen anderen in der Liste stehen, nur !autolink darf davor sein (sollte es sogar unbedingt, wenn du direkt auf die Funktion "bbcodeoff()" aus dem !autolink-Script zurückgreifen willst).

Alternative: Stelle es einfach so dar wie ich in diesem Beitrag und weise den Betrachter darauf hin, dass die Leerzeichen in den eckigen Klammern entfernt werden müssen ;)
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Rolly8-HL

Zitat

und weise den Betrachter darauf hin, dass die Leerzeichen in den eckigen Klammern entfernt werden müssen

NÖ auf keinen Fall, dann verzichte ich lieber auf alles und hänge die Datei einfach an.

Aber das andere werde ich mir noch mal richtig durch den Kopf gehen lassen.

Nur wird es etwas schlecht sein es als Download Text Datei wenn in der DB etwas anderes steht wie das was ich als Ausgabe sehen kann.
Die Ausgabe sehen, markieren Kopieren oder als **.txt sollte dann schon beides Identisch sein genau so wie ich es eingetragen habe.
Erste ein mal besten Dank, werde es versuchen umzusetzen.

Zusammengefügt am 22. Juli 2017 um 19:04:37:
Nachtrag: Es geht ja mit dem BBC code solange er sich selbst nicht wiederfindet.
So wie im angehängten Text es im BBC code zu setzen ist schon nicht mehr Möglich.
Rolly8-HL hat folgende Datei angehängt:
Du hast nicht die Berechtigung die Anhäge dieses Themas zu sehen.

Bearbeitet von Rolly8-HL am 22. Juli 2017 17:07:50
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Wie gesagt, du könntest für diesen Zweck einen eigenen BB-Code neu anlegen, den du dann ganz an den Anfang auf 1. oder 2. Position legst.

Im Prinzip ist das ganz einfach und geht recht schnell. Nehmen wir an dein neuer BB-Code soll "showbb" heißen.

Du legst folgende 3 neue Dateien an.

includes/bbcodes/showbb_bbcode_include_var.php:

<?php
if (!defined("IN_FUSION")) { die("Access Denied"); }
$__BBCODE__[] = array(
    "description" => $locale["bb_showbb_description"], "value" => "showbb", "bbcode_start" => "[showbb]",
    "bbcode_end" => "[/showbb]", "usage" => "[showbb]".$locale["bb_showbb_usage"]."[/showbb]"
);
?>

includes/bbcodes/showbb_bbcode_include.php:

<?php
if (!defined("IN_FUSION")) {
    die("Access Denied");
}

$containsShowBB = strpos($text, '[showbb]') !== FALSE;

if ($containsShowBB) {
   $text = preg_replace_callback('#\[showbb\](.*?)\[/showbb\]#si', 'callbackShowBB', $text);
}

function callbackShowBB($matches) {
   $res = str_replace("[", "&#91;", $matches[1]);
   $res = str_replace("]", "&#93;", $res);
   return "<div class='code_bbcode'><div class='tbl-border tbl2 tbl-code'><strong>BB-Code</strong></div><div class='tbl-border tbl1' style='width:100%;white-space:nowrap;overflow:auto'><pre class='prettyprint linenums' style='white-space:nowrap'>".nl2br($res)."</pre></div></div>\n";
}
?>

locale/German/bbcodes/showbb.php:

<?php
$locale['bb_showbb_description'] = "Zeigt gew&auml;hlten Text inkl. BBCodes, ohne diese zu parsen";
$locale['bb_showbb_usage'] = "Text, der BB-Codes enth&auml;lt";
?>


Das sollte sowohl unter v7 als auch unter v9 funktionieren. Bei v9 müsste man für den BB-Button noch ein Bild hinterlegen, sonst erscheint nur ein Knopf neben den anderen BB-Grafiken.
Bearbeitet von Krelli am 24. Juli 2017 18:58:57
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Rolly8-HL
Hallo, ja habe es verstanden und umgesetzt.
Das wäre jetzt ein Spezial BBC für Entwickler oder User die damit umgehen können.

Habe noch nicht alles getestet, sieht aber so aus als wäre es das richtige.

Besten Dank.

Zusammengefügt am 24. Juli 2017 um 12:51:54:
Nachtrag: Geht doch nicht, jetzt wird jeder BBC welcher auch immer ausgeblendet.
Damit kann kein anderer BBC mehr genutzt werden wofür er vorgesehen ist als Einzel BBC.
Bearbeitet von Rolly8-HL am 24. Juli 2017 10:51:54
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
Hab dir in meinem Beitrag die showbb_bbcode_include.php nochmal überarbeitet.
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Rolly8-HL
Ja, sieht vielversprechend aus, werde es mal in Ruhe durchtesteten.
Habe aber das nl2br dort weg genommen, ist sonst in der Ausgabe zu hoch.

Jetzt suche ich noch die Möglichkeit es mit mit save als Text Datei zu laden.

Das könnte dann als Bereicherung für die BBC sein.
Gruß Rolly8-HL
Was für Andere Wichtig ist muss für mich nicht genauso Wichtig sein!
Bin Dickkopf Unbelehrbar mache aus Protest nicht das was andere für Richtig halten!
Das gibt einem zu Denken oder?
Information:
PHP Version: Nicht ausgewählt •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: Nicht ausgewählt
 
Krelli
nl2br macht aber nur dann einen Zeilenumbruch, wenn er in der Eingabe so gesetzt wurde, also gewollt ist.

Save ist relativ einfach, muss nur wieder eckige Klammern haben
Information:
PHP Version: 8.2.x •  MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD
 
Springe ins Forum: