Domain überprüfen mittels preg_match

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

  • Domain überprüfen mittels preg_match

    Hallo
    Mein php-Block zum Ersetzen des BBcodes einer Forumssoftware lautet

    $message = preg_replace("/\[img\](.*?)\[\/img\]/si", "<!-- BBCode Start --><IMG SRC=\"\\1\" BORDER=\"0\"><!-- BBCode End -->", $message);

    Ich möchte gern diese Funktion derart abändern das IMG in SRC nur dann umgewandelt wird wenn innerhalb des IMG Befehls ein forgegebener Wert steht.

    Beispiel:
    steht in $message z.B. freigegeben
    [I M G]http://www.freigegebene-Domain.de/bild.jpg[/I M G]
    dann soll das Bild angezeigt werden

    ansonsten soll eine Fehlermeldung ausgegeben werden.

    In Etwa so, was aber nicht funktioniert:

    if (preg_match('/[^freigegeben]/i',$message)){
    $message = preg_replace("/\[img\](.*?)\[\/img\]/si", "<!-- BBCode Start --><IMG SRC=\"\\1\" BORDER=\"0 \"><!-- BBCode End -->", $message);
    }else{
    print "Error";
    }

    Was funktioniert ist:
    if(eregi ("freigegeben", $message)) {
    $message = preg_replace("/\[img\](.*?)\[\/img\]/si", "<!-- BBCode Start --><IMG SRC=\"\\1\" BORDER=\"0\"><!-- BBCode End -->", $message);
    }
    else {
    print "Error";
    }

    Leider ist dann aber wieder jede IMG Einbindung möglich wenn "freigegeben" in $message vorkommt.
    Also muss überprüft werden ob "freigegeben" zwischen
    IMG ung /IMG steht wenn ja dann Bild anzeigen wenn nein dann Fehlermeldung.

    Ist sowas möglich?



    Für Eure Hilfe wäre ich sehr dankbar

    Gruß hoefti

  • #2
    Ich würde mir mal mixed preg_replace_callback ( mixed pattern, mixed callback, mixed subject [, int limit]) anschauen ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Hallo goth

      Ich habe mich schon etwas mit dem Thema befasst, aber denkst du nicht auch das der Verweis auf eine Seite die eigentlich immer erste Anlaufstelle sein sollte eine wirkliche Hilfe ist.

      Würde ich die Lösung allein finden können hätte ich die ganze Nacht nicht am rechner gesessen und probiert ohne Ende.

      Ich fände es schön, wenn gerade du als Moderator dir etwas mehr Mühe geben würdest. Soll kein persönlicher Angriff sein nur eine freundliche Bitte

      Gruß hoefti

      Kommentar


      • #4
        Also:

        1. Eigentlich bin ich Moderator im SQL-Forum ...
        2. Bei einigen Besuchern ist es scheinbar nicht normal sich 'ne Nacht um die Ohren zu schlagen bzw. die Dokumentation zu lesen.
        3. Wurde in Deinem Text die genannte Funktion nicht erwähnt ... und mir war nicht bewust das Dir dieselbe bekannt war.
        4. Bin ich erst seit ein paar Tagen hier Moderator und mir war zwar bekannt das ich hier auch Hilfestellungen geben soll, jedoch nicht das ich immer mit Komplettlösungen auftrumpfen muß.
        5. Die meisten Mod's hier haben Ihre eigenen Jobs und das Ausarbeiten einer Lösung ist unter Umständen recht aufwendig. Ich glaube schon das sich das Team hier sehr viel Mühe gibt!

        Trotzdem:

        Code:
        function replaceCallback($s) {
        	static $freigegeben=array(
        			"freigegebene-domain.de"
        		);
        	if ( in_array(strtolower($s[2]), $freigegeben) ) return "<img src=\"".$s[1]."\" alt=\"\" />";
        	else return "FEHLER";
        }
        
        $result=preg_replace_callback("/\[img\](https?:\/\/www\.([^\.]+\.(([a-z]{2,3})|(info)|(biz))).*?)\[\/img\]/si", replaceCallback, $txtImage);
        wäre mein Vorschlag.
        Zuletzt geändert von goth; 13.07.2002, 13:40.
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          @hoefti
          Abgesehen davon sind Member, die gerade hereingeschneit sind schwer einzuschätzen wie ernst es ihnen mit der Fragestellung ist. Es kommt sehr oft vor, daß man sich voll die Mühe gibt, sich hinsetzt, codet und viel Zeit mit einer Problemlösung verbringt, mit dem Ergebnis, daß man kein Feedback mehr bekommt und man nie mehr was vom Fragestellenden hört.

          Zu Beginn ist es sicher ein gegenseitiges Abtasten und Abchecken, wie überall im Leben.

          Bleib bitte einige Zeit da bei uns und überzeuge Dich selbst, wie schnell man in der Community aufgenommen ist und welch angenehmes Klima hier herrscht.

          Die Lösungsrate und die Lösungszeiten hier sind außerordentlich hoch, das vorallem dadurch daß sich hier Leute gefunden haben, die im Team ein sehr großes Spektrum abdecken können.

          Auf alle Fälle herzlich willkommen.

          Kommentar


          • #6
            Original geschrieben von hand
            Die Lösungsrate und die Lösungszeiten hier sind außerordentlich hoch, ...
            Was hand damit meinte: Rate hoch, Zeit kurz. Es gibt Tage, da hat man schon nach wenigen Minuten eine hilfreiche Antwort.
            Auf alle Fälle herzlich willkommen.
            von mir denn auch mal
            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              Hallo zusammen

              Mal abgesehen davon das ich die Einstellung " viel Arbeit für nichts" durchaus verstehe wollte ich aber wie oben beschrieben niemanden etwas schlechtes, dafür habe weder ich noch ihr Zeit.

              Daher erstmal danke für die nette Aufnahme hier.

              Aber das Problem, also meins ist noch nicht gelöst und darum ging es mir eigentlich.

              Deine Version oben @ goth funktioniert leider nicht.
              Sie zeigt nun gar kein Bild mehr an.

              In meiner funktionierenden version wird einmal das Posting durcgegangen ob das Wort "smilie" in der Nachricht enthalten ist. Ist dem der Fall so wiid jeder IMG Tag in den src Befehl umgewandelt was ja bei verschiedenen URLs nicht so dolle ist.

              Im Prinzip müßtest ich doch jede Nachricht auseinandernehmen und jeden <img ... > (bzw [ img ] [ /img ] raussuchen und einzeln daraufhin untersuchen, ob da eine erlaubte url drin ist und wenn nicht, das img einfach nicht weiterreichen.

              Leider klappt das nicht so ganz und wichtig ist es mir schon.

              Ich komme da einfach nicht hinter

              Gruß hoefti

              Kommentar


              • #8
                Komisch ... bei mir hat's funktioniert ... !

                Wenn du die PHP-Formatierte Version vor der Änderung verwendet hast mag's daran gelegen haben ... ich habe die PHP-Formatierung jetzt rausgenommen ...

                Ich persönlich finde den Satz: "Ich fände es schön, wenn gerade du als Moderator dir etwas mehr Mühe geben würdest." auch vollkommen daneben wenn dahinter der Versuch einer Abschwächung "Soll kein persönlicher Angriff sein nur eine freundliche Bitte" steht ... eine freundliche Bitte formuliert man anders ... und ich habe hier sowas bisher auch noch nicht gelsen ... aber das mag meinetwegen jeder so sehen wie er will.
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  Codebeispiel:
                  Angehängte Dateien
                  carpe noctem

                  [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                  [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                  Kommentar


                  • #10
                    Hallo goth

                    Reich dir ein sorry das wir das Thema vergessen können, war wirklich nicht so gemeint.

                    Danke für dein Codebeispiel.
                    Ich habe nur das Problem das es sich bei den Files dieser Funktion um eine Forensoftware handelt.
                    Deshalb kann ich beim Absenden einer Nachricht kein zweites "form" angeben

                    Der ist an der Stelle wo der Beitragsersteller auf absenden klickt belegt durch
                    Code:
                     echo "<FORM action=\"$PHP_SELF\" METHOD=\"post\">";
                    es wird dabei eine php Datei die funktion.php includet
                    in dieser der Befehl stehen sollte.

                    Was ich nicht verstehe mit

                    Code:
                    <input name="txtImage" type="input" value="[img ]http://www.fregegebene-Domain.de/bild.jpg[/img ]" />
                    gebe ich doch nur ein bestimmtest bild frei oder ?

                    Gruß hoefti der mal freundschaftlich die Hand reicht

                    Kommentar


                    • #11
                      Original geschrieben von hoefti
                      Hallo goth

                      Reich dir ein sorry das wir das Thema vergessen können, war wirklich nicht so gemeint.
                      Klar reicht das ... eigentlich wäre selbst das nicht nötig ... ich bin ja nun auch machmal etwas bissig ...

                      Original geschrieben von hoefti
                      Danke für dein Codebeispiel.
                      Ich habe nur das Problem das es sich bei den Files dieser Funktion um eine Forensoftware handelt.
                      Deshalb kann ich beim Absenden einer Nachricht kein zweites "form" angeben

                      Der ist an der Stelle wo der Beitragsersteller auf absenden klickt belegt durch
                      Code:
                       echo "<FORM action=\"$PHP_SELF\" METHOD=\"post\">";
                      es wird dabei eine php Datei die funktion.php includet
                      in dieser der Befehl stehen sollte.

                      Was ich nicht verstehe mit

                      Code:
                      <input name="txtImage" type="input" value="[img ]http://www.fregegebene-Domain.de/bild.jpg[/img ]" />
                      gebe ich doch nur ein bestimmtest bild frei oder ?
                      Nein ... das hatte nur was mit meiner Faulheit zu tun ... ich kann REGEX's manchmal nicht in einem Zug erstellen ... und da ich keine Lust hatte in der Eingabezeile jedesmal wieder die BildURL anzugeben ... hab' ich's halt vorbelegt ...

                      Die Freigegebenen Domains stehen in der Callbackfunktion im Array: static $freigegeben=array("freigegebene-domain.de");

                      Bei Dir müßte die Funktion denke ich mal mit $message aufgerufen werden anstatt $txtImage.

                      $txtImage emulierte bei mir Deine Message Textarea ...

                      Original geschrieben von hoefti
                      Gruß hoefti der mal freundschaftlich die Hand reicht
                      ... du solltest dir innerhalb der Funktion mal ausgeben lassen was in $s steht ... print_r($s) ....
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #12
                        Hallo goth

                        Wie auch in diesem Forum wird nach Absenden die Datei zuerst neu aufgerufen
                        Dort klappt es auch insofern, das oberhalb des Textfeldes
                        bei der freigegebenen URL angezeigt wird

                        $result:= und dann das Bild

                        bei einer nicht freigegebenen Adresse
                        $result:= und dann der IMg Befehl

                        Dies ist zb die newtropic.php die Ansicht in der viewtropic.php ist dann aber immer das nur der img befehl angegeben wird.

                        Also erfolgt keine übergabe der neutropic an die viewtropic.

                        Gruß hoefti

                        Kommentar


                        • #13
                          Hallo

                          Ich bin leider immer noch nicht weiter gekommen

                          Versucht habe ich es nun mit
                          Code:
                          	$anfang = strpos($message,"\[img]");
                          	$ende = strpos($message,"\[/img]");
                          	$lanege = $anfangende - $anfang; 
                          	$tag = substr($message,$anfang,$laenge);
                          
                          	if(eregi ("e", $tag)) { 
                                echo "geht";
                          } 
                          else { 
                          echo "geht nicht";
                          }
                          Leider findet er in $tag keinen buchstaben mit e

                          Woran kann es liegen

                          auch
                          Code:
                          $anfang = substr($message,"\[img]");
                          	$ende = substr($message,"\[/img]");
                          	$lanege = $anfang - $ende; 
                          	$tag = substr($message,$anfang,$ende);
                          klappt nicht

                          Vielleicht hat ja noch jemand eine Idee

                          Gruß hoefti

                          Kommentar


                          • #14
                            Original geschrieben von hoefti
                            $anfang = strpos($message,"\[img]");
                            $ende = strpos($message,"\[/img]");
                            $lanege = $anfangende - $anfang;
                            $tag = substr($message,$anfang,$laenge);
                            1. solltest du $lanege in $laenge umbenennen, sonst ist $laenge ungesetzt (entspricht 0)
                            2. $anfang = strpos (...) +5; (willst ja das "[img]" nicht mit überprüfen, oder?!
                            3. was ist $anfangende?
                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar


                            • #15
                              Hallo

                              Das war aber ein kleiner Schreibfehler

                              Code:
                              	$anfang = strpos($message,"[img ]");
                              	$ende = strpos($message,"[/img ]");
                              	$laenge = $anfang - $ende;
                              	$tag = substr($message,$anfang,$laenge);
                              
                              	if(eregi ("domain.de", $tag)) { 
                                    $message = preg_replace("/[img ](.*?)[/img ]/si", "<!-- BBCode Start --><IMG SRC="1" BORDER="0"><!-- BBCode End -->", $message); 
                              } 
                              else { 
                              $message = preg_replace("/[img ](.*?)[/img ]/si", " Error.", $message); 
                              }
                              so hatte ich es probiert
                              das der img Tag mit überprüft wird kann erstmal aussen vor bleiben.

                              Aber warum erziehle ich auch damit kein ergebnis?

                              Gruß hoefti

                              Kommentar

                              Lädt...
                              X