【问题标题】:Passing emails in PHP header redirect - strips "@"?在 PHP 标头重定向中传递电子邮件 - 去除“@”?
【发布时间】:2013-08-08 19:54:58
【问题描述】:

当有人订阅我的列表时,我从我的自动回复器 (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");  

假设我在 getResponse 调用我的 PHP 脚本时收到 "?email=someguy@someserver.com"。当我的脚本运行时,生成的 HTTP 调用如下所示:

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

请注意电子邮件地址中缺少“@”

我该如何解决这个问题?

我不能使用会话变量(就像这个问题中建议的那样:How to pass variables received in GET string through a php header redirect?),因为调查提供者不允许我检索会话变量(没有自定义 PHP 脚本)。

我能做什么?

【问题讨论】:

    标签: php variables header get


    【解决方案1】:

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

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

    @ 变为 %40

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

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

    【讨论】:

    • 谢谢布拉德。接收服务器会正​​确解释吗?换句话说,当 %40 出现在 URI 上时,他们是否必须“解编码”它以存储正确的电子邮件地址? (我怀疑编码的字符是否可以用作电子邮件地址)...
    • 另外,你提到我的 URL 无效......那么电子邮件地址实际上是如何在 GET 字符串中显示为 @ 的(当我不做任何解码时检索它)?只是想知道......
    • @MichaelM,是的,服务器当然可以解释。这是标准。您不必进行任何解码,PHP 会为您完成,解析整个查询字符串并相应地填充 $_GET。当您在浏览器中键入它时它起作用的原因是您的浏览器对您很好,并在发送到服务器之前为您修复它。如果浏览器对您不好,很可能是服务器。如果不是,很可能是 PHP。无论如何,这是不正确的。必须对保留字符进行编码。另见:blooberry.com/indexdot/html/topics/urlencoding.htm
    • 非常感谢您的详细解释。我真的很感激。
    • 顺便说一下,我将使用此代码为我自动编码电子邮件: $email = (isset($_GET['email']) ? filter_var($_GET['email'] , FILTER_SANITIZE_ENCODED) : '');
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2023-03-20
    相关资源
    最近更新 更多