2013-08-08 3 views
1

Je reçois les variables GET de mon autorépondeur (getResponse) quand quelqu'un s'abonne à ma liste, et je dois les transmettre à un fournisseur de sondage dans une autre requête GET. J'utilise la fonction PHP "header()" mais le caractère "@" est retiré de l'email.Transmettre des e-mails dans la redirection d'en-tête PHP - "@"?

Voici mon code PHP:

// retrieve email from GET 
$email = $_GET['email']; 

// pass on email 
header("Location: http://surveyprovider.com/surveyID/start?email=$email"); 

Supposons que je reçois "[email protected]" quand getResponse appelle mon script PHP. Quand mon script est exécuté, l'appel HTTP résultant ressemble à ceci:

http://surveyprovider.com/surveyID/start?email=someguysomeserver.com 

Remarquez comment le « @ » manque dans l'adresse e-mail?

Comment résoudre ce problème?

Je ne peux pas utiliser les variables de session (comme suggéré dans cette question: How to pass variables received in GET string through a php header redirect?) car le fournisseur de sondage ne me laisse pas récupérer les variables de session (pas de script PHP personnalisé).

Que puis-je faire?

Répondre

2

Vous devez encoder correctement cette URL. Vous n'envoyez actuellement pas d'URL valide.

header('Location: http://surveyprovider.com/surveyID/start?email=' . urlencode($email)); 

Le @ devient %40:

http://surveyprovider.com/surveyID/start?email=test%40example.com 

http://php.net/manual/en/function.urlencode.php

+0

Merci Brad. Le serveur de réception interprétera-t-il correctement? En d'autres termes, lorsque le% 40 apparaît sur l'URI, devra-t-il le "dés-encoder" pour stocker une adresse e-mail correcte? (Je doute que le caractère encodé soit utilisable comme adresse e-mail) ... – MichaelM

+0

Aussi, vous mentionnez que mon URL n'est pas valide ... alors comment se fait-il que l'adresse e-mail apparaisse réellement avec un @ dans la chaîne GET (Je ne fais pas de décodage quand je le récupère)? Je me demandais ... – MichaelM

+0

@MichaelM, Oui, bien sûr, le serveur peut interpréter cela. C'est la norme. Vous n'avez pas à faire de décodage, PHP le fait pour vous, en analysant l'ensemble de la chaîne de requête et remplit '$ _GET' en conséquence. La raison pour laquelle cela fonctionne lorsque vous le tapez dans votre navigateur est que votre navigateur est gentil avec vous et le corrige pour vous avant d'envoyer au serveur. Si le navigateur n'était pas gentil avec vous, il est probable que le serveur serait. Si ce n'était pas le cas, il est probable que PHP le soit. En tout cas, ce n'est pas correct. Les caractères réservés doivent être codés. Voir aussi: http://www.blooberry.com/indexdot/html/topics/urlencoding.htm – Brad

Questions connexes