Philiph Mau: Grafiken nur von bestimmten URLs zulassen per REGEXP

Ich möchte mittels einem regulären Ausdruck nur Grafiken einer bestimmten URL in einem bereits erzeugten HTML Stream zulassen. Alle anderen IMG Tags sollen nachträglich einfach rausfliegen (durch "" ersetzen)!

Ich kann leider nur nach der eigentlich erlaubten URL suchen und diese rausschmeissen, aber das ist ja quatsch... Es fehlt quasi die negation zu der URL. Wie soll das funktionieren?

Mein bisheriger Ansatz:

/<img.*?images.myserver.tld.*?>/

Vll. weiss jmd. auch besseres?

Besten Dank,
Phil

  1. Hi,

    Ich kann leider nur nach der eigentlich erlaubten URL suchen und diese rausschmeissen, aber das ist ja quatsch... Es fehlt quasi die negation zu der URL. Wie soll das funktionieren?

    in PHP ist, wie in den meisten anderen Hochsprachen, der Operator zur Negation eines Ausdrucks das "!". Nutze ihn weise.

    Mein bisheriger Ansatz:
    /<img.*?images.myserver.tld.*?>/

    <img src="//boeser-server.example/mein/image?images.myserver.tld" alt=""/>
    <img src="//boeser-server.example/mein/image" alt="images.myserver.tld"/>
    <img src="//boeser-server.example/mein/image" alt="" title="images.myserver.tld"/>
    ...

    Regular Expressions sind nicht geeignet, um Strukturen zu erfassen.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. in PHP ist, wie in den meisten anderen Hochsprachen, der Operator zur Negation eines Ausdrucks das "!". Nutze ihn weise.

      Was nützt mir bitte der ! Operator beim preg_replace?

      fyi: "preg_replace() returns an array if the subject  parameter is an array, or a string otherwise."

      Sorry, aber mit dem kann ich ja mal absolut gar nix anfangen...
      Trotzdem danke für die Mühe!

      Regular Expressions sind nicht geeignet, um Strukturen zu erfassen.

      Ich will auch keine Strukturen erfassen, ich will per regulärem Ausdruck einfach gewisse Dinge aus einem vorhandenen HTML Code rausschmeissen, die da eben nicht hinein gehören.

      gruss
      Phil

      1. Mahlzeit,

        Was nützt mir bitte der ! Operator beim preg_replace?

        fyi: "preg_replace() returns an array if the subject  parameter is an array, or a string otherwise."

        In Deinem ursprünglichen Beitrag war nirgendwo die Rede von "preg_replace()". Also geh bitte nicht davon aus, dass hier IRGENDWER Gedanken lesen und erraten kann, was genau Du vorhast, wenn Du entscheidende Informationen verschweigst. Danke.

        Abgesehen davon kann Dir der "!"-Operator in regulären Ausdrücken sehr wohl behilflich sein - ganz egal, welche der PHP-Funktionen für reguläre Ausdrücke Du verwendest.

        Regular Expressions sind nicht geeignet, um Strukturen zu erfassen.

        Ich will auch keine Strukturen erfassen, ich will per regulärem Ausdruck einfach gewisse Dinge aus einem vorhandenen HTML Code rausschmeissen, die da eben nicht hinein gehören.

        Das ist schon klar. Aber wie Cheatah schon andeutete, ist es ziemlich ungeeignet, "einfach alle <img>-Tags, in denen irgendwo 'images.myserver.tld' vorkommt", wegzuschmeißen - dieses Muster kann schließlich auch im "alt"- oder "title"-Attribut, im Namen oder in irgendwelchen Event-Handlern vorkommen.

        Wenn, dann solltest Du explizit auf das Vorkommen des von Dir genannten Musters im "src"-Attribut prüfen.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. In Deinem ursprünglichen Beitrag war nirgendwo die Rede von "preg_replace()". Also geh bitte nicht davon aus, dass hier IRGENDWER Gedanken lesen und erraten kann, was genau Du vorhast, wenn Du entscheidende Informationen verschweigst. Danke.

          Hast Recht. Ich habs wohl vergessen hineinzuschreiben. Da stand nur durch "" ersetzen.

          Abgesehen davon kann Dir der "!"-Operator in regulären Ausdrücken sehr wohl behilflich sein - ganz egal, welche der PHP-Funktionen für reguläre Ausdrücke Du verwendest.

          Und das ist die eigentliche Frage: Wie? :)

          Das ist schon klar. Aber wie Cheatah schon andeutete, ist es ziemlich ungeeignet, "einfach alle <img>-Tags, in denen irgendwo 'images.myserver.tld' vorkommt", wegzuschmeißen - dieses Muster kann schließlich auch im "alt"- oder "title"-Attribut, im Namen oder in irgendwelchen Event-Handlern vorkommen.

          wenn Sie im alt oder title tag vorkommen, dann sollen Sie logischerweise auch raus. Es soll ja der gesamte IMG tag raus der sein src oder was auch immer irgendwie von nicht freigebenen Servern bezieht.

          Danke
          Phil

          1. Mahlzeit,

            Abgesehen davon kann Dir der "!"-Operator in regulären Ausdrücken sehr wohl behilflich sein - ganz egal, welche der PHP-Funktionen für reguläre Ausdrücke Du verwendest.

            Und das ist die eigentliche Frage: Wie? :)

            Laut der Dokumentation ...

            wenn Sie im alt oder title tag vorkommen, dann sollen Sie logischerweise auch raus. Es soll ja der gesamte IMG tag raus der sein src oder was auch immer irgendwie von nicht freigebenen Servern bezieht.

            Logischerweise? In Deinem ursprünglichen Posting sprachst Du von "Grafiken einer bestimmten URL". Wenn man davon absieht, dass die Formulierung Humbug ist und weiterhin davon ausgeht, dass Du "Grafiken, die von einem bestimmten Server eingebunden werden" meinst, ist es einzig und allein sinnvoll, den regulären Ausdruck auf das "src"-Attribut anzuwenden. Ob im "alt"- oder "title"-Attribut oder in irgendeinem Event-Handler der Grafik zufällig auch dieses Muster vorkommt, sollte für das, was Du vorhast, vollkommen irrelevant sein ... schließlich besagt das Vorkommen des von Dir gesuchten Musters in einem der gerade genannten Attribute absolut gar nichts darüber, ob die Grafik "von einer bestimmten URL" kommt.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. »»schließlich besagt das Vorkommen des von Dir gesuchten Musters in einem der »»gerade genannten Attribute absolut gar nichts darüber, ob die Grafik "von »»einer bestimmten URL" kommt.

              Meine Güte, das ist immer so nervig... Ich hab das Phänomen nun schon öfters verfolgt bei einigen Foren. Jmd. Postet etwas, keiner hat Ahnung aber weiss trotzdem alles besser und zerpflückt Postings bis zum Detail. Grundsätzlich werden die angestrebten Lösungswege für falsch gehalten und in Frage gestellt... Merkt Euch doch mal eines: Auch die Leute die die Probleme haben, haben weitaus mehr zeit mit diesem Problem verbracht um eine Lösung zu  zu finden und auch sehr viel Zeit in die "Logik" gesteck - warum es so sein muss hat also seinen Sinn! Wieso wird das nichmal ernst genommen was geschrieben wird?
              Die Headline meines Betrags lautete: "Grafiken nur von bestimmten URLs zulassen per REGEXP". So: ob das ein preg_replace oder wegen mir auch anders gemacht wird ist für mich eigentlich zweitrangig. Es sollte aber effektiv sein. Ich such eine LÖSUNG und keine Diskussionsstoff, wie das die meisten hier oft tun...
              Sorry Leute, aber das ist doch keine Talkshow!

              1. Hi,

                Meine Güte, das ist immer so nervig...

                Auf Luecken im eigenen Denkvorgang hingewiesen zu werden?
                Ach was, mit ein bisschen Selbstbewusstsein verkraftet man das - und lernt sogar noch was dabei.

                Ich hab das Phänomen nun schon öfters verfolgt bei einigen Foren. Jmd. Postet etwas, keiner hat Ahnung aber weiss trotzdem alles besser und zerpflückt Postings bis zum Detail.

                Dass "keiner eine Ahnung" haette, ist im Rahmen dieses Threads eine ziemlich unverfrorene Unterstellung - die vermutlich nur mit deiner eigenen Ahnungslosigkeit entschuldigt werden kann.

                Grundsätzlich werden die angestrebten Lösungswege für falsch gehalten und in Frage gestellt...

                Jeder intelligente Mensch nimmt erfreut zur Kenntnis, wenn seine Gedanken von anderen kritisch hinterfragt werden.

                Merkt Euch doch mal eines: Auch die Leute die die Probleme haben, haben weitaus mehr zeit mit diesem Problem verbracht um eine Lösung zu  zu finden und auch sehr viel Zeit in die "Logik" gesteck - warum es so sein muss hat also seinen Sinn! Wieso wird das nichmal ernst genommen was geschrieben wird?

                Wieso nimmst du die Anmerkungen, die dich darauf hinweisen, in wie fern du definitiv auf dem Holzweg bist, nicht ernst?

                Die Headline meines Betrags lautete: "Grafiken nur von bestimmten URLs zulassen per REGEXP".

                Und wenn du mit "von bestimmten URLs" die Adresse im src-Attribut meinst, dann hilft dir ein einfacher regulaerer Ausdruck, der *irgendwo* im img-Tag nach diesem URL sucht, nicht weiter - warum, wurde dir anhand von Beispielen verdeutlich. Kannst oder willst du das nicht begreifen?

                So: ob das ein preg_replace oder wegen mir auch anders gemacht wird ist für mich eigentlich zweitrangig. Es sollte aber effektiv sein. Ich such eine LÖSUNG und keine Diskussionsstoff, wie das die meisten hier oft tun...

                Du hast gute Denkansaetze bekommen, u.a. den von seth.
                Wenn Denk*ansaetze* bei dir aber auf fruchtlosen Boden fallen (bzw. sich als sprichwoertliche Perle vor ein Borstentier herausstellen) - dann liegt das wohl mehr an dir als an den Leuten hier im Forum.

                Sorry Leute, aber das ist doch keine Talkshow!

                Vom Intelligenzgrad reiht sich deine gerade gegebene Antwort aber nahtlos in solche nachmittaeglichen Gespraechsrunden ein.

                MfG ChrisB

                1. gudn tach!

                  Und wenn du mit "von bestimmten URLs" die Adresse im src-Attribut meinst, dann hilft dir ein einfacher regulaerer Ausdruck, der *irgendwo* im img-Tag nach diesem URL sucht, nicht weiter - warum, wurde dir anhand von Beispielen verdeutlich. Kannst oder willst du das nicht begreifen?

                  imho wurde der OP aber von den anfaenglichen antworten insg. ein wenig auf den holzweg gefuehrt. gleich die erste antwort las sich so, als seien regexp voellig ungeeignet fuer sein vorhaben. zudem wurde auf "!" als negation hingewiesen ohne weitere erklaerung. die zweite antwort half ihm in dieser hinsicht ueberhaupt nicht weiter. es war mehr sowas:
                  1. antwort: nutze "!" als negation
                  OP:         aber das geht doch nicht, weil ...
                  2. antwort: doch (ohne weil!)

                  danach wurden die antworten zwar besser, aber der OP war bereits angepisst.

                  zudem vermute ich ein paar missverstaendnisse. einerseits wurde von dem erlaubten url und andererseits von den verboteten urls gesprochen. es sind halt u.u. zwei verschiedene herangehensweisen, ob man nun alle bilder verbietet, die verbotene urls enthalten oder ob man alle bilder erlaubt, deren jeweiliger url erlaubt sind.
                  ich stimme EKKi zu, dass am sinnvollsten ist, das src-attribut darauf zu testen, ob dort ein erlaubter url steht. alt- und title-attribut sollten dann in jedem fall keine rolle mehr spielen. es sei denn jene attribute haben in diesem speziellen fall ein format, dass man auf "erlaubt/verboten" testen kann. dafuer wurden jedoch noch keine regeln genannt.

                  So: ob das ein preg_replace oder wegen mir auch anders gemacht wird ist für mich eigentlich zweitrangig. Es sollte aber effektiv sein. Ich such eine LÖSUNG und keine Diskussionsstoff,

                  hast du meine beiden loesungsvorschlaege da schon gesehen? wenn du nicht sagst, was dir daran nicht gefaellt, ist es schwierig weiterzuhelfen.

                  prost
                  seth

    2. gudn tach!

      Regular Expressions sind nicht geeignet, um Strukturen zu erfassen.

      ich wuerde es eher so formulieren: regulaere ausdrucke sind dazu gedacht, strukturen zu erfassen.

      offenbar meinen wir verschiedene sachen mit "strukturen". ich bin mir jedoch nicht sicher, was du damit meinst. was meinst du damit?

      prost
      seth

  2. gudn tach!

    Ich möchte mittels einem regulären Ausdruck nur Grafiken einer bestimmten URL in einem bereits erzeugten HTML Stream zulassen. Alle anderen IMG Tags sollen nachträglich einfach rausfliegen (durch "" ersetzen)!

    ich wuerde so vorgehen:
    1. preg_split mittels /(<img .*?>)/
    2. fuer jedes entsprechende elemente dann
        if(!preg_match('/erlaubter url/', ...)) element ='';
    anwenden, und schliesslich
    3. join

    prost
    seth

    1. gudn tach!

      ich wuerde so vorgehen:

      1. preg_split mittels /(<img .*?>)/
      2. fuer jedes entsprechende elemente dann
            if(!preg_match('/erlaubter url/', ...)) element ='';
        anwenden, und schliesslich
      3. join

      oder mittels nagative look-ahead-assertions, siehe perldoc perlre oder php-manual.

      muss wech, sonst haett ich 'n bsp. angegeben.

      prost
      seth