Thorsten: alles löschen was sich innerhalb von <> befindet

ich möchte aus einem Text String alle Formatierungen löschen, also alles was sich zwischen den Zeichen <> (<strong>, <div class="weg">, etc.) befindet, inkl dieser.

Ich habe es hiemrit versucht, aber leider ohne großen Erfolg:

preg_replace("-<(.*?)>-si"," ",$text)

Thorsten

  1. @@Thorsten:

    nuqneH

    Ich habe es hiemrit versucht,

    Versuch’s mal damit: strip_tags()

    aber leider ohne großen Erfolg:
    preg_replace("-<(.*?)>-si"," ",$text)

    “Now they have two problems.”

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    1. Ich habe es hiemrit versucht,
      Versuch’s mal damit: strip_tags()

      Er will die <Klammern> stehen lassen.

      aber leider ohne großen Erfolg:
      preg_replace("-<(.*?)>-si"," ",$text)

      “Now they have two problems.”

      Das Zitat erklärt nicht, worauf sich das zweite Problem bezieht.
      Ich denke es bezieht sich ursprünglich auf den geistigen Nachvollzug des Codes. Ein für mich häufiger nicht nachvollziehbares Argument.

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. Hallo,

        Versuch’s mal damit: strip_tags()
        Er will die <Klammern> stehen lassen.

        liest du das aus der Formulierung "alles was sich zwischen den Zeichen <> (...) befindet, inkl dieser"? Für mich heißt das, die spitzen Klammern sollen mit weg.

        “Now they have two problems.”
        Das Zitat erklärt nicht, worauf sich das zweite Problem bezieht.

        Wohl auf die Mächtigkeit, aber auch Komplexität von RegEx, die dazu führt, dass man oft etwas anderes erreicht, als man eigentlich wollte (und das ursprüngliche Problem doch nicht gelöst hat).

        Ciao,
         Martin

        --
        Finanztipp:
        Leihen Sie sich Geld von einem Pessimisten.
        Er rechnet sowieso nicht damit, dass er es zurückbekommt.
        1. Er will die <Klammern> stehen lassen.

          liest du das aus der Formulierung "alles was sich zwischen den Zeichen <> (...) befindet, inkl dieser"? Für mich heißt das, die spitzen Klammern sollen mit weg.

          Nein, er will auch < und > innerhalb von < und > ersetzen, für mich heißt das, er will gierig suchen. ;-)

      2. @@Beat:

        nuqneH

        Das Zitat erklärt nicht, worauf sich das zweite Problem bezieht.

        Nun, womöglich darauf, dass es Entwicklern oft schwerfällt, einen regulären Ausdruck (ein Suchmuster) so aufzuschreiben, dass es ganau das Beabsichtigte tut. (Das zeigen auch die unzähligen Fragen hier im Forum.)

        Ein anderes Problem von Suchmustern ist deren unperformante Verarbeitung. Wenn sich das Problem auch mit einfachen Stringoperationen lösen lässt, ist man mit diesen besser dran.

        Der bedeutendere Teil des Zitats ist “Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.'” They should know better. They should think twice.

        Suchmuster ja, wenn das Problem so komplex ist, dass eins erforderlich ist. Nein, wenn es auch einfacher geht.

        Und nein, wenn die verwendete Sprache schon eine Funktion zur Verfügung stellt, die das Gewünschte tut.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  2. Moin!

    ich möchte aus einem Text String alle Formatierungen löschen, also alles was sich zwischen den Zeichen <> (<strong>, <div class="weg">, etc.) befindet, inkl dieser.

    Warum willst du das löschen? "<" und ">" sind absolut vertrauenswürdige und erlaubte Zeichen, die man nicht löschen muss.

    Ich habe es hiemrit versucht, aber leider ohne großen Erfolg:

    preg_replace("-<(.*?)>-si"," ",$text)

    Das hilft dir bei deinem Problem nicht weiter. Deine Frage kommt vermutlich aus der Situation, dass du irgendwelche Benutzereingaben absichern willst, die vielleicht HTML enthalten könnten, was vom Browser nicht ausgeführt werden soll.

    Es gibt zwei Lösungen dafür, eine einfach und eine komplexe.

    Die einfache Lösung ist die Verwendung von htmlspecialchars(). Die wandelt diese Zeichen in HTML-Entities um, und der Browser wird einfach nur die eingegebenen Zeichen anzeigen.

    Die komplexe Lösung erfordert die Installation der Bibliothek HTMLPurifier.

    Alle weiteren Ansätze, egal ob mit regulären Ausdrücken, strip_tags() oder sonstigen Dingen, werden das Problem nur unzureichend und lückenhaft lösen.

    Das mir in diesem Zusammenhang erst unlängst bekanntgewordene Fail ist hier nachzulesen: http://blog.astrumfutura.com/archives/425-Zend_Filter_StripTags-Friend,-Foe,-or-Security-Nightmare.html

    - Sven Rautenberg

  3. Ich habe es hiemrit versucht, aber leider ohne großen Erfolg:

    preg_replace("-<(.*?)>-si"," ",$text)

    Ich habe den Beitrag gelesen und wollte helfen, aber leider ohne großen Erfolg.

    Was kommt bei dem Versuch raus und was paßt daran nicht?

    Ach so, da ich schrieb ohne großen Erfolg und nicht ohne Erfolg, wenn man etwas löschen will, sollte man es nicht mit einem Leerzeichen ersetzen.

  4. Es geht darum das eine Textseite formatiert ist und ich nur den reinen Text (Inmhalt) möchte und deshalb alle Formatierungen öchen möchte.

    Beispiel:

    <b>Hallo, </b><br/>  
    <i>ich will das weg haben</i><br/>  
    <div class="hilfe">Sorry für die Komplizierte Beschreibung.</div>
    

    Nach dem löschen

    Hallo, ich will das weg haben. Sorry für die Komplizierte Beschreibung.

    1. Moin,

      Beispiel:

      <b>Hallo, </b><br/>

      <i>ich will das weg haben</i><br/>
      <div class="hilfe">Sorry für die Komplizierte Beschreibung.</div>

      
      >   
      > Nach dem löschen  
      >   
      > Hallo, ich will das weg haben. Sorry für die Komplizierte Beschreibung.  
        
      also doch [strip_tags()](http://de2.php.net/manual/en/function.strip-tags.php).  
        
      So long,  
       Martin  
      
      -- 
      Ein Theoretiker ist ein Mensch, der praktisch nur denkt.  
      
      
      1. @@Der Martin:

        nuqneH

        also doch strip_tags().

        Warum muss man manchen alles dreimal sagen?

        Mir kommt der Verdacht auf, <> im Subject steht für rechtes und linkes Ohr.

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    2. Beispiel:

      <b>Hallo, </b><br/>

      <i>ich will das weg haben</i><br/>
      <div class="hilfe">Sorry für die Komplizierte Beschreibung.</div>

        
      Bei einer gierigen Suche nach <, irgendwas und > mittels regulärem Ausdruck würde nichts übrig bleiben, denn das erste Zeichen ist ein < und das letzte ein >.
      
      1. Hi,

        Bei einer gierigen Suche nach <, irgendwas und > mittels regulärem Ausdruck würde nichts übrig bleiben, denn das erste Zeichen ist ein < und das letzte ein >.

        Dann definiere irgendwas etwas strikter - als irgendwas, was kein > ist.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
        1. Bei einer gierigen Suche nach <, irgendwas und > mittels regulärem Ausdruck würde nichts übrig bleiben, denn das erste Zeichen ist ein < und das letzte ein >.

          Dann definiere irgendwas etwas strikter - als irgendwas, was kein > ist.

          Nicht lieber etwas was kein < ist?

          1. Hi,

            Bei einer gierigen Suche nach <, irgendwas und > mittels regulärem Ausdruck würde nichts übrig bleiben, denn das erste Zeichen ist ein < und das letzte ein >.

            Dann definiere irgendwas etwas strikter - als irgendwas, was kein > ist.

            Nicht lieber etwas was kein < ist?

            Nein, warum?

            <[^>]*>  
            1222223
            
              
            <blah>sülz<blubb><jodel>...</jodel></blubb>  
            122223    12222231222223   1222222312222223
            

            Sag mir, wenn ich mich irgendwo irre - aber der Ausdrück sollte m.E. genau das markierte matchen, auch wenn er gierig ist.
            (Davon, dass < und > nicht innerhalb von Attributwerten oder Knoteninhalten vorkommen, geht die Betrachtung natürlich aus. Aber das ist doch eh klar, oder?)

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. Sag mir, wenn ich mich irgendwo irre - aber der Ausdrück sollte m.E. genau das markierte matchen, auch wenn er gierig ist.

              Daß er das macht, auch wenn er gierig ist, ist klar und um "falsch" ging es ohnehin nicht, nur um lieber/besser.

              Ich hatte nur im Hinterkopf, daß mit einem anders gemeinten > eher zu rechnen ist als mit einem <. Ich hatte mich nur in der gedachten Auswirkung vertan und in dem Kontext hier ist der Gedanke aber im Ganzen relativ hinfällig.