Ankündigung

Einklappen
Keine Ankündigung bisher.

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

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

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

    moin, folgendes Problem: habe eine kleine blog-seite, mit GET wird die ID überprüft und der Inhalt aus der datenbank dann ausgegeben :

    PHP-Code:
    echo str_replace('<?php', '&lt;?php', str_replace('?>', '?&gt;', str_replace('<a href="', '<a target="_blank" href="', $blog['textinhalt'])));
    <?php habe ich so schonmal "blockiert" falls das vorkommt. jetzt will ich aber einen Beitrag schreiben, wo in <pre> ein ganzes php-script samt HTML mit einer Tabelle kommt. im pre soll aber nur dieser Klartext stehen, wie ich ihn auch in notepad++ sehe. wie kann ich das machen ?


  • #2
    Dafür gibt es Funktionen wie htmlspecialchars !

    PHP-Code:
    $code '<php
    echo "ein Test";
    '
    ;
    echo 
    '<pre>'htmlspecialchars($code,ENT_QUOTES,'UTF-8').'</pre>'
    PHP-Klassen auf github

    Kommentar


    • #3
      ja schon, aber es soll ja nur im bereich <pre> und </pre> sein, der rest soll ja als html dargestellt werden...

      Kommentar


      • #4
        Wenn du ein spezielles Problem hast dann solltest du schon mal die Details offen legen.
        - was kommt aus deiner Datenbank? Beispieldaten.
        - Was davon möchtest die wie im Browser dargestellt haben?
        PHP-Klassen auf github

        Kommentar


        • #5
          Ich verstehe auch nicht so recht.

          Hier mal ein Beispiel wie man das macht.
          Einmal der Inhlat direkt in HTML ausgegeben und ein mal zum ändern in einer Textarea
          PHP-Code:
          <?php

          // Beispielcode
          $code '
                  <php
                  $out "noch ein Test";
                  ?>
                  <!DOCTYPE HTML>
                  <html lang="de">
                  <head>
                      <meta charset=UTF-8>
                  </head>
                  <body>
                      <p><?= $out; ?></p>
                  </body>
                  </html>
                  '
          ;

          $codeoutput '<pre>' nl2br(htmlspecialchars($code,ENT_QUOTES,'UTF-8')) . '</pre>';

          ?>

          <!DOCTYPE HTML>
          <html lang="de">
          <head>
              <meta charset=UTF-8>
              <title>Rechne Ausdruck</title>
              <style>
              label, code, input {display: block;}
              input {text-align:right; size:15em}
              pre, textarea {width: 50em; height: 30em;}
              pre {background-color: rgb(240,240,240);}
              </style>
          </head>
          <body>
              <h3>Beispiel</h3>
              <form method="post">
                  <p>PHP Datei Vorschau</p>
                  <?= $codeoutput?>
                  <label>PHP Datei ändern</label>
                  <textarea><?=  $code?><textarea>
              </form>
          </body>
          </html>
          Wenn du was anderes haben willst, solltest du es besser formulieren.

          Kommentar


          • #6
            Hier beispielinhalt aus der DB:


            Code:
            <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>
            <pre>Hier der PHP- und html-code der als klartext stehen soll. <?php echo $bla; echo 'fetter text geht mit <b>: <b>fetter text</b>';?></pre>
            <a href="#">das soll wieder als Link angezeigt werden</a>.

            Kommentar


            • #7
              Und genau das, wie man das macht habe ich dir gezeigt. Ein wenig Eigeninitiative beim Umsetzen darfst du ruhig zeigen.

              Kommentar


              • #8
                protestix klar geht das so, aber meine Seite gibt ja den Spalten-inhalt der DB für jeden blogeintrag im echo aus, da kann ich ja nicht für einen Beitrag irgendwie davor eine variable erstellen, zudem nur eine .php alle Einträge anzeigt...

                kann ich irgendwie im echo mit str_replace sagen, er soll alles zwischen <pre> und </pre> mit htmlspecialchars ausgeben ?

                Kommentar


                • #9
                  Dir fehlen Grundlagen.

                  PHP-Code:
                  </table>
                  <pre><?= nl2br(htmlspecialchars($code,ENT_QUOTES,'UTF-8')) . nl2br(htmlspecialchars('fetter text geht mit <b>: <b>fetter text</b>' ,ENT_QUOTES,'UTF-8')); ?> </pre>
                  <a ...

                  Kommentar


                  • #10
                    ah ok. habe es jetzt mal so probiert aber es wird immer noch nicht als klartext angezeigt...


                    PHP-Code:
                    echo str_replace('<pre>''<pre>htmlspecialchars("'str_replace('</pre>''\')</pre>'$blog['textinhalt'])); 
                    auf der Seite selbst sehe ich htmlspecialchars(' auch dargestellt. verstehe nicht wieso...

                    Kommentar


                    • #11
                      Versuche es mal so:

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

                      Kommentar


                      • #12
                        joa fast. <pre> wird nicht angewendet, sondern steht mit auf der Seite als klartext.

                        Kommentar


                        • #13
                          Dann nimm $matches[1]

                          Kommentar


                          • #14
                            jetzt wird kein <pre> verwendet.

                            Kommentar


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

                              Kommentar

                              Lädt...
                              X