Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit regul�rem Ausdruck

Einklappen

Neue Werbung 2019

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

  • Problem mit regul�rem Ausdruck

    Hallo zusammen,

    ich habe ein Problem mit einem regul�ren Ausdruck.

    und zwar m�chte ich in einem Text, der zuvor mit htmlentities bearbeitet wurde einige TAGs wieder erlauben, aber irgendwie haut das nicht hin, und ich komm einfach nicht auf die z�ndende Idee.

    Mein Problem ist, das sowohl Konstrukte wie
    Code:
    <table style="border: solid 1px;">
    als auch
    Code:
    <table>
    erkannt werden sollen.
    Bisheriges:
    Code:
    <?php
    $text = '&lt;table style="border: solid 1px;"&gt;&lt;tr&gt;&lt;td&gt;test&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;';
    $pattern = '#(&lt;)([\/]?(table|tr|td)(\s.*)?)(&gt;)#is';
    echo preg_replace($pattern, "<\\2>",$text)."\n\n";
    $pattern = '#(&lt;)([\/]?(table|tr|td))(&gt;)#is';
    echo preg_replace($pattern, "<\\2>",$text)."\n\n";
    ?>
    Das führt zu folgender Ausgabe:
    Code:
    <table style="border: solid 1px;"&gt;&lt;tr&gt;&lt;td&gt;test&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table>
    
    &lt;table style="border: solid 1px;"&gt;<tr><td>test&lt;br /&gt;</td></tr></table>
    All meine Versuche, das ganze zu kombinieren verliefen erfolglos, zumal beim ersten replace zudem leider das letzte &gt; erkannt wird, und nicht das folgende.

    Und so sollte es aussehen:

    Wäre toll, wenn mir jemand helfen könnte.
    Code:
    <table style="border: solid 1px;"><tr><td>test&lt;br /&gt;</td></tr></table>

  • #2
    hmmmmm, vieleicht ?

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

    $text '&lt;table style="border: solid 1px;"&gt;&lt;tr&gt;&lt;td&gt;test&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;';

    $suchen = array('~&lt;~i''~&gt;~i');
    $ersatz = array('<''>');

    echo 
    preg_replace$suchen$ersatz$text);

    ?>
    EDIT:

    Achso, sollen ja nur bestimmte sein ...

    Kommentar


    • #3
      Wenn ich dich richtig verstehe, bräuchtest du sowas:
      PHP-Code:
      <?php
          $regex 
      '|&lt;table.*?&gt;|i';
      ?>

      Kommentar


      • #4
        Jep, das ist das Problem, sonst müßte ich vorher ja auch kein htmlentities drüber jagen

        Kommentar


        • #5
          xabbuh, damit ersetzt er aber auch den br-Tag

          Kommentar


          • #6
            oh sry mein fehler, ich hatte zum testen grad noch ein b-tag als erlaubt drin, deshalb hat er das br auch umgewandelt. Ohne dem b-Tag passts.

            Was mich zum n�chsten Problem bringt, wie bekomme ich jetzt ein Whitespace dazwischen?
            also quasi wenn vor &gt; noch text kommt, so mu� diese ein f�hrendes \s haben.

            <<<Edit>>>
            Habs rausbekommen, danke.
            PHP-Code:
            <?php
            $text 
            '&lt;table style="border: solid 1px;"&gt;&lt;tr&gt;&lt;td&gt;test&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;';
            $pattern '#(&lt;)([\/]?(b|table|tr|td)(\s.*?|))(&gt;)#is';
            echo 
            preg_replace($pattern"<\\2>",$text)."\n\n";
            ?>

            Kommentar

            Lädt...
            X