ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
1948
1948
EMPFEHLEN
-
20.04.04 11:15 #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:
Darin habe ich bereits aspx und [\?=a-z0123456789]* eingefügt, um Aspx mit Querystrings parsen zu lassen, und es klappt auch wunderbar.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;
}
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."
-
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]*)
-
20.04.04 12:58 #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:
Oder muss ich auch w und d mit einem Backslash escapen, also so?PHP-Code:([^\"\\?\\&]*\\.(gif|jpg|jpeg|bmp|png|aspx)[\\&\\?\\=wd]*)
---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."
-
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
-
20.04.04 13:07 #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."
-
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
-
20.04.04 14:22 #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) .
Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
-
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
...jenesPHP-Code:[IMG]h t t p://kachelator.europe.hosting.net/tracksigid.aspx?id=1058346&img=3[/IMG]
....du hast dann ein Semikolon in der URL.... welches bisher im RegExp nicht gestattet ist.PHP-Code:[IMG]h t t p://kachelator.europe.hosting.net/tracksigid.aspx?id=1058346[b][color=red]&[/color][/b]img=3[/IMG]
-
21.04.04 09:16 #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
-
RegEx Generator, vom String zum RegEx?
Von tequila slammer im Forum .NET CaféAntworten: 11Letzter Beitrag: 15.11.10, 07:58 -
Mittels Regex Gültigkeit einer anderen Regex prüfen
Von blade runner im Forum PHPAntworten: 8Letzter Beitrag: 25.06.10, 12:07 -
REGEX Problem - Regex auf den gesamten String anwenden?
Von angelikamorgan im Forum JavaAntworten: 1Letzter Beitrag: 21.01.08, 16:58 -
[RegEx] Hilferuf eines RegEx-Desperados
Von ManicMarble im Forum Coders TalkAntworten: 15Letzter Beitrag: 16.06.05, 08:49 -
<?php regexen - kenner gefragt
Von Muffinmampfer im Forum PHPAntworten: 9Letzter Beitrag: 01.06.04, 23:49





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren