[CODE]-Tags ersetzen

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

  • [CODE]-Tags ersetzen

    Hallo,

    ich habe ich Script geschrieben, dass es dem User erlaubt, selbst Artikel zu schreiben. Die Sache ist recht komplex (mehrere Seiten möglich, automatische Übersicht der Unterüberschriften oben...).

    Nun wollte ich zusätzlich eine [CODE*]-Funktion einbauen, die es dem User erlaubt, automatisch eingefärbten PHP-Code einzufügen.

    Das Problem ist, dass der Benutzer den Code natürlich Einrücken können sollte. Dies soll durch eine schlichte Ersetzung der Leerzeichen durch " "-Zeichen ermöglich werden.

    Allerdings sollen nur die Leerzeichen zwischen den [CODE*]-Tags ersetzt werden und nicht die außerhalb.

    Zuerst haben ich es mit dem Regex
    PHP-Code:
    $_POST2['inhalt'] = preg_replace("#\[CODE\](.*) (.*)\[\/CODE\]#Us""[CODE*]$1 $2[/CODE*]"$_POST2['inhalt']); 
    versucht, wobei $_POST2['inhalt'] die Variable mit dem Text und # der Delemiter ist. Hierbei wird allerdings nur das erste Leerzeichen ersetzt.

    Wie schaffe ich es, dass die Ersetzung normal funktioniert?

    //Edit:

    Das [CODE*] Soll natürlich [CODE] heißen, mussste allerdings wegen Fehlern erstetzt werden.
    Zuletzt geändert von talaron; 10.04.2006, 19:29.

  • #2
    Hi,

    ich würde das in zwei Schritten versuchen: Zuerst alles zwischen den beiden CODEs auslesen und ersetzen, z.B. durch #C#O#D#E und den Inhalt dazwischen in $str_TMP speichern. Dann $str_TMP mit Einrückungen bearbeiten und dann zurückersetzen... dann musst du keinen "Über-Regex" schreiben sondern kannst dich immer auf das konkrete Problem konzentrieren...

    Grüße
    strauberry

    Kommentar


    • #3
      Kleine Zwischenfrage:

      Wenn $_TEMP ein Verschachteltes Array ($_TEMP[1][1]) ist, durchläuft "foreach ($_TEMP)" dann nur die erste Ebene ($_TEMP[1], $_TEMP[2]...) oder alle Ebenen ($_TEMP[1][1], $_TEMP[1][2], $_TEMP[2][1]...)?

      Kommentar


      • #4
        Nur die erste Ebene... mit print_r() kannst dir ein Array mit allen Ebene ausgeben und foreach durchläuft immer nur eine, nicht die darunter...

        Kommentar


        • #5
          Ich hab mal ein wenig gebastelt. Die Hinumwandlung klappt einwandfrei, die Rückumwandlung klappt aber nicht.

          Es gibt keinen Fehler aber es wird einfach nicht gewandelt.

          Da der Code recht lang ist, hab ich ihn auf
          in eine Textdatei ausgelagert.

          Kommentar


          • #6
            Was genau klappt nicht? Die Umwandlung der Leerzeichen oder das Einfügen des "Leerzeichen-Ersetzt-Strings" in das Original?

            Was gibt denn print_r($_TEMP2) aus? Stimmen da die keys und values überein?

            Kommentar


            • #7
              Jetzt klappt es. Letztes Problem wäre allerdings, dass das leerzeichen in <br /> auch übersetzt wird und so keine normalen Zeilenumbrüche rauskommen.

              Kommentar


              • #8
                dann mach davor doch noch ein
                PHP-Code:
                str_replace("<br />","<br>",$String

                Kommentar


                • #9
                  Dann wär die Sache ja aber nicht mehr XHTML-Kompatibel

                  Eigentlich müsste auch <br></br> gehen (keine Leerzeichen) aber das wäre dann doch etwas umständlich.

                  Kommentar


                  • #10
                    Wie oft kommt es denn vor, dass ein r / vom benutzer geschrieben wird? Nicht so oft Pass den Regex doch einfach so an, dass dieser Fall anders behandelt wird...

                    Kommentar


                    • #11
                      Wenn der Benutzer <br /> schreiben würde, würde das dank htmlspecialchars ohnehin nicht funktionieren.

                      Allerdings werden zeilenumbrüche in <br /> umgewandelt. Und jetzt behaupte nicht, dass du noch nie einen Zeilenumbruch in deinen PHP-Codes hattest.

                      Kommentar


                      • #12
                        ne das nicht... bin etwas müde...

                        Kommentar


                        • #13
                          Habs jetzt hinbekommen.

                          Ich ersetze zuerst das <br /> durch <br>, dann ändere ich die Leerzeichen und wandle anschließend die <br> wieder zurück.

                          Also dann nochmal danke für die Hilfe strauberry.

                          Talaron

                          Kommentar


                          • #14
                            Klar gern geschehen!

                            Kommentar

                            Lädt...
                            X