[.net] Reguliere expresie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Yoki1985
  • Registratie: Augustus 2007
  • Laatst online: 19-09 08:07
Ik heb een linktracking systeem opgezet in asp.net voor email nieuwsbrieven.
Dit werkt op de volgende manier:

Als een persoon op een link in de email klikt wordt hij eerst doorgestuurd naar mijn website waar een paar gegevens worden opgeslagen en dan wordt hij pas doorgestuurd naar de originele link.

De link in de nieuwsbrief heeft de volgende opmaak:

code:
1
http://www.localhost.be/LinkTracking/<EmailAdres>/<CampagneID>/<URL>


De gegevens in de link vang ik op dmv reguliere expressies. Hiervoor gebruik ik de volgende regexp:

code:
1
/LinkTracking/(?<persstudnr>.*)/(?<campid>.*)/(?<link>.*).*


Dit werkt perfect voor de volgende link:

code:
1
http://www.localhost.be/LinkTracking/<EmailAdres>/<CampagneID>/www.google.be


Echter als er slashes voorkomen in de url dan werkt het niet meer bv:

code:
1
http://www.localhost.be/LinkTracking/<EmailAdres>/<CampagneID>/http://www.google.com/translate


dan gaat hij precies van achteraf beginnen tellen en dan is http://www.google.com mijn campid ipv <CampagneID>

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:51

Haan

dotnetter

Je kan het volgens mij prima zonder regex doen:

- Je kan alles voor (en inclusief) /linktracking/ meteen droppen.
- Je weet dat het emailadres nu begint op index 0 en eindigt voor de eerstvolgende slash.
- Je weet dat het campagneID eindigt bij de volgende slash
- wat overblijft is de URL

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Split je string op de / en je krijgt een array. Index nul bevat LinkTracking, één bevat het mailadres, twee bevat campagneId en drie en verder plak je met een join weer aan elkaar.

MSDN: String.Split Method (System)
MSDN: String.Join Method (System)

Acties:
  • 0 Henk 'm!

  • DEiE
  • Registratie: November 2006
  • Laatst online: 18-09 15:15
HuHu schreef op woensdag 18 april 2012 @ 09:22:
Split je string op de / en je krijgt een array. Index nul bevat LinkTracking, één bevat het mailadres, twee bevat campagneId en drie en verder plak je met een join weer aan elkaar.

MSDN: String.Split Method (System)
MSDN: String.Join Method (System)
Dan kan je beter String.Split Method (Char[] separator, int count) of String.Split Method (String[] separator, int count, StringSplitOptions options) gebruiken. De count geeft aan in hoeveel stukken hij geknipt moet worden, en het laatste stuk heeft dan hetzelfde resultaat als jouw join.

Acties:
  • 0 Henk 'm!

Verwijderd

Je miste twee vraagtekens in je expressie

/LinkTracking/(?<persstudnr>.*?)/(?<campid>.*?)/(?<link>.*).*

Daarmee kun je de eigenschappen uit de url halen met een regular expression.

Acties:
  • 0 Henk 'm!

  • Yoki1985
  • Registratie: Augustus 2007
  • Laatst online: 19-09 08:07
Merci,

Ik was het inderdaad te ver aan het zoeken.
Ik gebruik de regexp nu enkel nog om te testen of de linktracking url juist opgebouwd is. Indien ja dan ga ik verder op de manier die jullie aanbrachten.

@D32: Heb de vraagtekens nu ook toegevoegd aan de regexp voor de controle ;)

[ Voor 16% gewijzigd door Yoki1985 op 18-04-2012 10:04 ]


Acties:
  • 0 Henk 'm!

  • CMG
  • Registratie: Februari 2002
  • Laatst online: 10-12-2024

CMG

Zou het niet slimmer zijn om het url te URL ENCODEN? dan doe je het meteen zoals het hoort... MSDN: HttpUtility.UrlEncode Method (String) (System.Web)

NKCSS - Projects - YouTube


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Idd, in de hostname zijn non-ASCII karakters toegestaan (http://مثال.إختبار) bijvoorbeeld. Als je die in je query-string probeert te duwen dan is het resultaat invalide.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Praktisch gezien komen internationalized domain names zelden voor. En dan nog kun je ze van te voren decoderen en de ASCII versie in je redirect-URL stoppen. (Jouw link is bijvoorbeeld equivalent aan http://xn--mgbh0fb.xn--kgbechtv).

Persoonlijk zou ik om privacy- en veiligheidsredenen liever geen e-mailadressen en target URLs in de redirect URL willen coderen. Als iemand http://www.google.com/ kan vervangen door een malware-site dan kan het jou kwalijk genomen dat je vanaf jouw domein naar zo'n site redirect, bijvoorbeeld.

Ik zou dus liever een link genereren van de vorm: http://www.localhost.be/LinkTracking/123/456 waarbij 123 een gebruikers-id is en 456 een link-id. Welk e-mailadres en target-URL daarbij hoort kun je dan prima in een losse database opslaan. Je voorkomt zo in ieder geval misbruik en het uitlekken van e-mailadressen van je klanten.

[ Voor 58% gewijzigd door Soultaker op 20-04-2012 22:45 ]

Pagina: 1