[PHP] urldecode laat af en toe een '=' staan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb net een HTML-mailtje naar wat mensen gestuurd (opt-in), met een linkje naar de website met in de argumenten hun e-mailadres. Dat e-mailadres schrijf ik in het HTML-mailtje weg nadat ik urlencode() overheen heb gegooid.

Nu blijkt echter dat in de website af en toe een '=' blijft staan nadat ik urldecode() er overheen heb gegooid. Op een ogenschijnlijk willekeurige plek. Iemand hier ideeen over?

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Jah, dat we toch wel wat meer info nodig hebben; wellicht de code met urlencode() en outputmethode, maar ook zeker een voorbeeld van foute output. Ogenschijnlijk willekeurig betekent meestal dat je iets over het hoofd ziet ;) Trouwens, waar stond die = oorspronkelijk? Brontekst? Mailadres? Code?

[ Voor 14% gewijzigd door Rataplan op 21-10-2003 15:44 ]


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit verstuur ik, met $row[0] een e-mailadres uit de database (zonder '='):
PHP:
1
2
3
4
$footer = "<A\r\n
href=\"http://www.website.nl/mailing.php?email=" . urlencode($row[0]) . "\"\r\n
target=\"_blank\" class=\"verwijderen\"\r\n
style=\"color: #000000\">klik hier als u zich wilt inschrijven</A>";

Vervolgens klikken mensen op het linkje, dan wordt op de pagina mailing.php het volgende in het form gezet:
HTML:
1
2
<INPUT type="text" name="email" size="40" maxlength="63"
value="<?php echo urldecode($email); ?>"><BR>

En vervolgens opgeslagen in de database:
PHP:
1
2
$query = "INSERT INTO mailing (email)";
$query .= " VALUES ('" . str_replace("'", "''", $email) . "')";

[ Voor 224% gewijzigd door Verwijderd op 21-10-2003 16:10 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
als ik dan kijk welke mailadressen in de andere tabel zitten zie ik: voorbeeld=@hetnet.nl; voorbeeld@xs=4all.nl

En nu ik weer kijk een nieuw voorbeeld erbij: voorbeeld@zonn=et.nl

Er zijn er nog twee, maar met te specifieke mailadressen om hier te posten...

[ Voor 41% gewijzigd door Verwijderd op 21-10-2003 16:01 ]


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Ik zou iig addslashes ipv str_replace gebruiken. Verder raadt php.net aan om htmlentities icm met urlencode te gebruiken, maar ik denk niet dat dat hier aan de orde is.

Verder zet je in je <a> een hele hoop \r\n's, waarvan ik me afvraag of ze nodig zijn.

Zet iig in het tweede php-scriptje even een echo op $email, om te kijken of de waarde daar al vern**kt is.

Maar de fout zie ik ook niet 1-2-3... Zijn de fouten reproduceerbaar, dus: krijg je bij hetzelfde adres die = steeds op dezelfde plaats?


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Waarom gebruik je urldecode bij het afdrukken van het email adres in het form veld? Het 'op de link drukken' is eigenlijk al een soort urldecode. De enige reden waarom er ge urlencode wordt is om speciale tekens te escapen en er voor te zorgen dat de juiste waarden binnen komen. Ga maar eens naar page.php?x=a%20b en druk in die pagina gewoon eens x af. Dan zul je zien dat x is gevuld met 'a b' en niet 'a%20b'.

Ik zou juist eerder htmlSpecialChars loslaten op dat formulier veld zodat de vulling van het attribuut gegarandeerd geldig is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Nu online
Kun je de source van een mailtje laten zien? Toevallig worden regels in sommige coderingen namelijk afgesloten met een '=' karakter dus misschien gaat het ergens fout bij het afbreken van die regel HTML code. Beetje vreemd probleem, want dat zou juist moeten kunnen (dan filtert de mail client die '=' er later juist weer uit), maar bij gebrek aan andere leads... :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verder zet je in je <a> een hele hoop \r\n's, waarvan ik me afvraag of ze nodig zijn.
Yups, dat is nodig. Zie thread [rml][ php] MIME mail naar Zonnet gebruikers[/rml]

Maar bedankt voor de tips (Rataplan en Janoz), ik ga er eens naar kijken. Overigens moet ik bekennen dat ik nog niet getest heb of de fout reproduceerbaar is...

[ Voor 4% gewijzigd door Verwijderd op 21-10-2003 16:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Soultaker> wordt moeilijk, de mailtjes worden zonder mijn tussenkomst verstuurd en het testmailtje naar mijzelf gaat goed... Goede kans dat het in die afbrekingen zit, eerder gedonder mee gehad.

Acties:
  • 0 Henk 'm!

Verwijderd

Het lijkt erop dat je een probleempje hebt met de juiste encoding.

Volgens mij is je HTML-content met de encoding "quoted printable" in het mime blok gezet. In quoted printable worden = tekens onder andere gebruikt om soft-breaks aan te geven (regel langer dan 76 tekens, dus afgebroken met soft-break):
"An equal sign as the last character on an encoded line indicates such a non-significant ('soft') line break in the encoded text." (zie RFC1521: http://www.freesoft.org/CIE/RFC/1521/6.htm).

Tot nog toe heb ik vrij weinig problemen ondervonden met het versturen van mails via de open source class phpMailer (http://phpmailer.sourceforge.net).

Het schijnt overigens aan te raden te zijn om niet quoted printable in te stellen als encoding, maar bijvoorbeeld base64 te gebruiken.

Succes met je mailtjes!

Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Nuttige tip! Heb ik ook weer wat geleerd. Thx!
Overigens moet ik bekennen dat ik nog niet getest heb of de fout reproduceerbaar is...
Fo=ei ;) Gelukkig geeft Jigal - denk ik - de tip van de dag :)


Journalism is printing what someone else does not want printed; everything else is public relations.

Pagina: 1