tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
1887
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Hallo! Zunächst einmal: Ich habe keine Ahnung von PHP und nur ein wenig Erfahrung mit Regular Expressions.

    Ich habe versucht, in einem mit PHP erstellten Forum das Einbinden von .aspx-Dateien (optional mit QueryStrings) als Images zu ermöglichen.
    Also so etwas wie [Imagetag]h t t p://kachelator.europe.hosting.net/tracksigid.aspx?id=1058346[/Imagetag] sollte ebenso behandelt werden wie beispielsweise ein Jpg oder ein Gif. Da das entsprechende Aspx ein Bild zurückliefert, ist das an sich auch kein Problem. Nur der Parser des Forums machte mir zunächst Schwierigkeiten.

    Für das Parsen von Image-Tags verwendet das Forum zur Zeit folgende Routine:
    PHP-Code:
     function parseimages ($text='') {
      
    $tags=$this->imagetags;
      foreach (
    $tags as $code) {
       
    $text=preg_replace("#\[".$code['tag']."]([^\"\?\&]*\.(gif|jpg|jpeg|bmp|png|aspx)[\?=a-z0123456789]*)\[\/".$code['tag']."\]#eiU","\$this->image('$code[html]','\\1')",$text);
       }
      return 
    $text;
      } 
    Darin habe ich bereits aspx und [\?=a-z0123456789]* eingefügt, um Aspx mit Querystrings parsen zu lassen, und es klappt auch wunderbar.

    Jetzt habe ich aber das Problem, dass ich meinem Aspx
    zwei Querystrings übergeben will in der Form [Imagetag]h t t p://kachelator.europe.hosting.net/tracksigid.aspx?id=1058346&img=3[/Imagetag]
    das funktioniert leider nicht, und zwar wegen des '&'. Ich habe zwar den entsprechenden Abschnitt in der "$text=" -Zeile folgendermassen angepasst, aber das scheint nicht zu helfen: [\&\?=a-z0123456789]* . (Ich habe halt das '&' noch eingefügt, damit es ebenfalls übernommen wird.)

    Nun endlich meine Frage: Wie muss der reguläre Ausdruck aufgebaut sein, damit auch mehrere durch '&' getrennte Querystrings korrekt geparst werden?
    Für Rat wäre ich sehr dankbar.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  2. #2
    Avatar von Nils Hitze
    Nils Hitze Nils Hitze ist offline Admin a.D.
    Registriert seit
    Sep 2000
    Ort
    Dachau
    Beiträge
    2.201
    Blog-Einträge
    104
    Probier mal bitte folgenden RegEx, bei mir funktioniert der
    wunderbar. Habe das zwar nur mit dem RegexCoach getestet,
    aber müsste gehen :

    PHP-Code:
    ([^"?&]*.(gif|jpg|jpeg|bmp|png|aspx)[&?=\w\d]*) 
     

  3. #3
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Hm, ich habe es mal ausprobiert. Beim ersten Versuch habe ich das komplette Forum lahmgelegt, beim zweiten (nach Einfügen von ein paar '\\') wurden auch die einzelnen Querystrings nicht mehr geparst. Das habe ich reingesetzt:
    PHP-Code:
    ([^"\\?\\&]*\\.(gif|jpg|jpeg|bmp|png|aspx)[\\&\\?\\=wd]*) 
    Oder muss ich auch w und d mit einem Backslash escapen, also so?
    PHP-Code:
    ([^"\\?\\&]*\\.(gif|jpg|jpeg|bmp|png|aspx)[\\&\\?\\=\\w\\d]*) 
    ---

    Ich habe es einfach mal ausprobiert und festgestellt, dass die untere Variante ebenfalls nicht in der Lage ist, das '&' mitzuparsen. Schade.

    Übrigens habe ich es da oben nicht geschafft, den Backslash vor dem doppelten Anführungszeichen sichtbar zu machen.
    Geändert von Kachelator (20.04.04 um 13:03 Uhr)
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Das w und d müssen auch escaped werden.... sollen für Buchstabe und Ziffer stehen..... das Anführungszeichen müsste auch escaped werden, und nach dem Circumflex gehört auch ein Backslash....(wenn es die Zeichenklasse negieren soll) .... das Board verschluckt die Dinger immer gerne
     

  5. #5
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Hm, habe ich schon bemerkt. Leider scheint das immer noch nichts zu bewirken.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Mmmmh....Poste doch mal die ganze Klasse, damit man sieht, was dort vor sich geht.... ach ne, lieber ranhängen, sonst sind die Backslashes wieder alle weg
     

  7. #7
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Ich weiss nicht, was du mit Klasse meinst, da ich mich zwar gut mit C++ auskenne, mit PHP aber eher nicht. Ich hänge mal die Datei dran, wo die Parsersachen drin sind, okay? Die Stelle findet sich in der Funktion parseimages (Zeile 111) .
    Angehängte Dateien Angehängte Dateien
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  8. #8
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Hallo...

    die Lösung ist einfacher als man denkt
    du musst zusätzlich zum Ampersand auch das Semikolon erlauben.

    Warum....der komplette Text wird mit htmlentities() behandelt... da wird aus

    PHP-Code:
    [IMG]h t t p://kachelator.europe.hosting.net/tracksigid.aspx?id=1058346&img=3[/IMG] 
    ...jenes
    PHP-Code:
    [IMG]h t t p://kachelator.europe.hosting.net/tracksigid.aspx?id=1058346[b][color=red]&[/color][/b]img=3[/IMG] 
    ....du hast dann ein Semikolon in der URL.... welches bisher im RegExp nicht gestattet ist.
     

  9. #9
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Waaaaahnsinn! Das hat sofort geklappt! Fatal gut!

    Damit hast du einen kleinen PHP-Deppen (mich) sehr glücklich gemacht!

    Danke, danke!
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

Ähnliche Themen

  1. RegEx Generator, vom String zum RegEx?
    Von tequila slammer im Forum .NET Café
    Antworten: 11
    Letzter Beitrag: 15.11.10, 07:58
  2. Antworten: 8
    Letzter Beitrag: 25.06.10, 12:07
  3. Antworten: 1
    Letzter Beitrag: 21.01.08, 16:58
  4. [RegEx] Hilferuf eines RegEx-Desperados
    Von ManicMarble im Forum Coders Talk
    Antworten: 15
    Letzter Beitrag: 16.06.05, 08:49
  5. <?php regexen - kenner gefragt
    Von Muffinmampfer im Forum PHP
    Antworten: 9
    Letzter Beitrag: 01.06.04, 23:49