在PHP标题重定向中传递电子邮件-strips“@&引用;?

在PHP标题重定向中传递电子邮件-strips“@&引用;?,php,variables,header,get,Php,Variables,Header,Get,当有人订阅我的列表时,我从我的自动应答器(getResponse)接收GET变量,我需要在另一个GET请求中将这些变量传递给调查提供者。我使用PHP“header()”函数,但是“@”字符从电子邮件中被删除 以下是我的PHP代码: // retrieve email from GET $email = $_GET['email']; // pass on email header("Location: http://surveyprovider.com/surveyID/start?email

当有人订阅我的列表时,我从我的自动应答器(getResponse)接收GET变量,我需要在另一个GET请求中将这些变量传递给调查提供者。我使用PHP“header()”函数,但是“@”字符从电子邮件中被删除

以下是我的PHP代码:

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

// pass on email
header("Location: http://surveyprovider.com/surveyID/start?email=$email");  
让我们假设我收到了“?电子邮件=someguy@someserver.com“当getResponse调用我的PHP脚本时。当脚本运行时,生成的HTTP调用如下所示:

http://surveyprovider.com/surveyID/start?email=someguysomeserver.com
注意到电子邮件地址中缺少“@”了吗

如何解决此问题

我不能使用会话变量(如本问题中建议的:),因为调查提供程序不允许我检索会话变量(没有自定义PHP脚本)


我能做什么?

您需要正确编码该URL。您当前未发送有效的URL

header('Location: http://surveyprovider.com/surveyID/start?email=' . urlencode($email)); 
@
变为
%40

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

谢谢你,布拉德。接收服务器会正确解释这一点吗?换句话说,当%40出现在URI上时,他们是否必须对其进行“反编码”以存储正确的电子邮件地址?(我怀疑编码字符是否可用作电子邮件地址)…此外,您提到我的URL无效。。。那么,电子邮件地址如何在GET字符串中实际显示为@(我在检索它时不进行任何解码)?只是想知道…@MichaelM,是的,服务器当然可以解释。这是标准。您不必进行任何解码,PHP会为您进行解码,解析整个查询字符串并相应地填充
$\u GET
。当您在浏览器中键入它时,它工作的原因是您的浏览器对您很好,并在发送到服务器之前为您修复它。如果浏览器对你不好,很可能是服务器对你不好,如果不是,很可能是PHP对你不好。无论如何,这是不对的。必须对保留字符进行编码。另请参见:非常感谢您的详细解释。我真的很感激。顺便说一下,我将使用此代码为我自动编码电子邮件:$email=(isset($\u GET['email'])?filter\u var($\u GET['email'],filter\u SANITIZE\u ENCODED):“”);