Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP-codes, etc. in <pre> als Klartext ausgeben, wie ?

Einklappen

Neue Werbung 2019

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

  • #16
    ah gut , jetzt fehlen noch die Spaltenumbrüche ist alles in einer Zeile im <pre> tag. sollte das aber nicht eigentlich nl2br machen ?

    Kommentar


    • #17
      Nein, der nl2br ist für Zeilenumbrüche innerhalb des <pre> Tags. Dafür müsstest du aber ganz hinten im Regulären Ausdruck noch ein s angeben.

      Mir ist allerdings nicht klar was mit Spaltenumbrüchen gemeint ist. Die Tabelle ist ja vor <pre> und wird daher ganz normal als HTML ausgegeben.
      sorry, shift-taste kaputt

      Kommentar


      • #18
        komischerweise ist das <pre> aber alles in einer Zeile obwohl es mehrere sein müssten. wenn ich es selbst da rein schreibe anstatt den Datenbank-Inhalt nutze mit mehreren Zeilen wird es richtig angezeigt, liegt also an der datenbank... Woran kann das da liegen ? also so geht es :

        PHP-Code:
        echo preg_replace_callback('#\<pre\>(.+?)\</pre\>#s', function ($matches) {
             return 
        '<pre>' nl2br(htmlspecialchars($matches[1], ENT_QUOTES,'UTF-8')) . '</pre>';
        }, 
        '<pre>zeile 1
        zeile2</pre>'
        ); 

        Kommentar


        • #19
          Wenn es in der Datenbank falsch drin steht, also ohne Zeilentrenner, dann kannst du hinterher auch nichts mehr machen.

          Kommentar


          • #20
            hab es ja gerade nochmal testweise neu eingefügt, aber wieso ist das so ? normal übernimmt er es doch quasi... wie fügt man die Zeilentrenner denn in die DB ein ? habs einfach aus pastebin nochmal kopiert.

            Kommentar


            • #21
              Genauso wie anderen Text auch. Man maskiert ihn vor dem insert oder verwendet PDO.
              Wir wissen nicht wo der Text her kommt, wie er eingefügt wird, noch kennen wir deine DB Struktur geschweige denn deren Inhalt.

              Wenn du also etwas dazu wissen willst zeige entsprechenden Code und ein DB Dump.

              Kommentar


              • #22
                PDO nutze ich...

                diesen text füge ich ein: https://hastebin.com/adejanavek.css

                meinst du das mit Dump ?

                --
                -- Tabellenstruktur für Tabelle `test`
                --

                CREATE TABLE IF NOT EXISTS `test` (
                `id` int(10) unsigned NOT NULL,
                `spalte1` text COLLATE utf8_unicode_ci NOT NULL,
                `spalte2` text COLLATE utf8_unicode_ci NOT NULL,
                `int1` int(11) NOT NULL
                ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

                --
                -- Daten für Tabelle `test`
                --

                INSERT INTO `test` (`id`, `spalte1`, `spalte2`, `int1`) VALUES
                (1, '<p>Some text here.</p><br><pre>player_limit: -1ip_forward: falsepermissions:default:- bungeecord.command.server- bungeecord.command.list</pre>', '', 0);

                --
                -- Indizes der exportierten Tabellen
                --

                --
                -- Indizes für die Tabelle `test`
                --
                ALTER TABLE `test`
                ADD PRIMARY KEY (`id`);

                --
                -- AUTO_INCREMENT für exportierte Tabellen
                --

                --
                -- AUTO_INCREMENT für Tabelle `test`
                --
                ALTER TABLE `test`
                MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;
                /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
                /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
                /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

                Kommentar


                • #23
                  Da ist kein Zeilenumbruch drin.
                  Zeig mal den Code, wo es in die Datenbank geschrieben wird.
                  sorry, shift-taste kaputt

                  Kommentar


                  • #24
                    den hier oder was meinst du ?

                    Code:
                    <p>Some text here.</p><br><pre>player_limit: -1
                    ip_forward: false
                    permissions:
                    default:
                    - bungeecord.command.server
                    - bungeecord.command.list</pre>

                    Kommentar


                    • #25
                      Nein, den PHP-Code wo der Text in die Datenbank geschrieben wird
                      sorry, shift-taste kaputt

                      Kommentar


                      • #26
                        achso, habs jetzt in phpmyadmin gemacht, aber auch mit php gehts nicht :

                        PHP-Code:
                        try{
                            
                        $pdo=new PDO('mysql:host=localhost;dbname=XXX','XXX','XXX',
                            array(
                            
                        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
                            
                        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
                        } catch (
                        PDOException $e){
                            echo 
                        'error';
                            exit;}

                        $statement=$pdo->prepare("INSERT INTO test (spalte1) VALUES (:spalte1)");
                        $result=$statement->execute(array('spalte1' => '<p>Some text here.</p><br><pre>player_limit: -1
                        ip_forward: false
                        permissions:
                        default:
                        - bungeecord.command.server
                        - bungeecord.command.list</pre>'
                        )); 

                        Kommentar


                        • #27
                          Weis jetzt auch nicht wo bei dir der Fehler liegt. Must du halt debuggen.
                          Hab mal ein Komplettbeispiel mit SQLite gemacht, welches bei mir ohne Probleme funktioniert:
                          PHP-Code:
                          <?php
                          $options 
                          = array(
                            
                          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
                          );
                          $db = new PDO("sqlite::memory:",null,null,$options);
                          $sql "CREATE TABLE tab (id INTEGER PRIMARY KEY  NOT NULL , content TEXT NOT NULL  DEFAULT '')";
                          $db ->exec($sql);

                          //content einfügen
                          $sql "INSERT INTO tab (id, content) VALUES (:id,:content)";
                          $stmt $db->prepare($sql);
                          $content '
                          <p>Der Teaser hier.</p>
                          <table>
                              <tr>
                                  <th>TITEL_1</th>
                                  <th>TITEL_2</th>
                              </tr>
                              <tr>
                                  <td>SPALTE_1</td>
                                  <td>SPALTE_2</td>
                              </tr>
                          </table>
                          Hier kommt der PHP- und html-code der als klartext stehen soll.<pre>
                          <?php
                            echo $bla;
                            echo \'fetter text : <b>fetter text</b>\';
                          ?>
                          </pre>
                          <a href="#">das soll wieder als Link angezeigt werden</a>.'
                          ;

                          $stmt -> execute(array("id" => 1"content" => $content));

                          $dbData $db->query("SELECT content FROM tab")->fetch(PDO::FETCH_COLUMN);

                          $output preg_replace_callback('#\<pre\>(.+?)\</pre\>#s', function ($matches) {
                               return 
                          '<pre>' htmlspecialchars($matches[1], ENT_QUOTES,'UTF-8') . '</pre>';
                          }, 
                          $dbData);

                          echo 
                          $output;
                          Ausgabe:
                          Der Teaser hier.
                          SPALTE_1 SPALTE_2
                          Hier kommt der PHP- und html-code der als klartext stehen soll.

                          < ?php
                          echo $bla;
                          echo \'fetter text : <b>fetter text</b>\';
                          ?>
                          das soll wieder als Link angezeigt werden. (Um die Ausgabe möglicht ähnlich darzustellen musste ich etwas tricksen).

                          Das nl2br hab ich rausgenommen. Wenn zwischen <pre> und </pre> Code dargestellt werden soll, dann bitte konsequent und nicht Teile davon als HTML interpretieren.
                          Der PHP-Code muss ebenfalls mehrzeilig vorliegen (mit nl getrennt) und nicht in einer Zeile!

                          LG jspit

                          Kommentar

                          Lädt...
                          X