Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] htmlspecialchars-Funktion innerhalb von preg_replace aufrufe

Einklappen

Neue Werbung 2019

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

  • [Erledigt] htmlspecialchars-Funktion innerhalb von preg_replace aufrufe

    Hallo zusammen,
    ich habe folgendes PRoblem, bei der Eingabe in ein Textareafeld, kann der User zwischen "[SOURCE]" und "[/SOURCE]" html-code eingeben, der natürlich nicht als solcher ausgegeben werden soll.

    Das will ich mit "htmlspecialchars" machen. Die Zeichenfolge "[CODE]" steht aber noch zwischen normalem Text, der nicht verändert werden soll, deswegen wollte ich "preg_replace" nehmen um das ganze einzugrenzen, mein Ansatz ist folgender:

    Code:
    $text = preg_replace('|^(.*[SOURCE]).*([/SOURCE].*)$|', htmlspecialchars($text, ENT_QUOTES), $text);
    Bislang macht er es nicht, was am Funktionsaufruf innerhalb von preg_replace liegt. Wie muss ich den richtig angeben? Bzw. geht das überhaupt? Was würdet ihr empfehlen?

    Gruß Christian

  • #2
    $text = preg_replace("/\[source\](.*)\[\/source\]/isUe", "htmlspecialchars('\\1', ENT_QUOTES)", $text);

    Kommentar


    • #3
      Vielen dank, funktioniert super, doch wofür steht das "isUe"??

      Kommentar


      • #4
        Das sind Modifikatoren, das kannst du hier nachlesen:
        http://de3.php.net/manual/de/referen....modifiers.php

        Kommentar


        • #5
          Oh, mir ist doch noch was aufgefallen, und zwar werden die Tags [SOURCE] und [/SOURCE] gelöscht, allerdings brauch ich die nachher noch weil ich die dann in div-tags umwandle. Wie kann man verhindern das sie gelöscht werden?

          Kommentar


          • #6
            Mit dem Modifer »e« ist aber eine gefährliche Sache.
            Denn würde ich mal rausnehmen.

            PHP-Code:
            <?php
            error_reporting
            (E_ALL); 

            $TXT = <<<EOD
            Tags [SOURCE]
            [b]uhu[/b]
            [/SOURCE] gelöscht
            Tags [SOURCE]
            [b]oho[/b]
            [/SOURCE] gelöscht
            EOD;

            $pattern '~(\[SOURCE\])(.*)(\[/SOURCE\])~isU';

            $ersatz '$1 '.htmlspecialchars('$2'ENT_QUOTES).' $3';

            echo 
            preg_replace($pattern$ersatz$TXT);

            ?>

            Kommentar


            • #7
              Hi, danke für deine Antwort.
              Er macht eigentlich alles was er soll, nur werden die Html-Tags nicht entwertet, sprich man sieht den Source-Code nicht, hat da das "htmlspecialchars" nicht gegriffen?

              Kommentar


              • #8
                Achso, ich dachte der HTML-Code soll auch ausgewertet werden ?
                Sonst einfach htmlspecialchars('$2') schreiben ...

                Kommentar


                • #9
                  Ach kackte heute:

                  PHP-Code:
                  <?php
                  error_reporting
                  (E_ALL);

                  $TXT = <<<EOD

                  [b]uhu[/b] 
                  Tags [SOURCE] 
                  [b]uhu[/b] 
                  [/SOURCE] gelöscht 
                  Tags [SOURCE] 
                  [b]oho[/b] 
                  [/SOURCE] gelöscht
                  [b]uhu[/b] 

                  EOD;

                  $pattern '~(\[SOURCE\])(.*)(\[/SOURCE\])~isU'
                  $ersatz '$1 $2 $3'
                  preg_match_all($pattern$TXT$array);
                  foreach(
                  $array[2] as $temp$TXT str_replace($temphtmlspecialchars($temp), $TXT);

                  echo 
                  $TXT;
                  echo 
                  '<pre>'$TXT'</pre>';

                  ?>

                  Kommentar


                  • #10
                    Wahnsinn CIX88, es funktioniert einwandfrei *freude*!!!
                    Viele dank für die Hilfe!!

                    Kommentar

                    Lädt...
                    X