【问题标题】:Problem in activation key, using php激活密钥问题,使用 php
【发布时间】:2011-08-11 21:25:31
【问题描述】:

我正在为我的 wordpress 安装使用自定义登录脚本。一切正常,除了激活密钥以下列格式发送给注册用户:

http://mydomain.com/?page_id=1278&mail=user@email.com&activate_key=7edbad

但是,当用户点击上述链接时,电子邮件中的“@”会消失,因此会提示激活密钥无效。

有人可以指导我吗?

这是将激活链接放在一起的代码:

$link=get_option('home').'/?page_id='.$pageid.'&mail='.$user_email.'&activate_key='.$key;

【问题讨论】:

  • PS:如果我手动将链接复制/粘贴到浏览器中,它可以正常工作。
  • 我做了一个小测试并将激活链接转发到我的outlook(以消除它可能只是gmail的问题)。当以某种方式单击链接时,URL 会发生变化,并且“@”会消失,从而导致激活错误。
  • @Sledge,你浏览器地址栏中的@是不是?或者至少是 URL 编码的 %40?
  • 是的,@ 在地址栏中。无论使用 url 编码和 http 构建建议的激活链接格式如何,都会导致 user@mail.com 或 user%40mail.com 在单击链接时 @ 或 %40 会消失,使其格式为 usermail.com
  • 刚刚注意到这段代码..也许这与它有关? if (isset($_POST['email'])) $email=attribute_escape(strip_tags(stripslashes((trim($_POST['email'])))));elseif (isset($_GET['email']) ) $email=attribute_escape(strip_tags(stripslashes(strtolower(trim($_GET['email'])))));

标签: php email format key activation


【解决方案1】:

您可能需要对该 URL 中的参数进行编码,对每个参数的值使用 urlencode() 函数:

$link=get_option('home')
            .'/?page_id='.urlencode($pageid)
            .'&mail='.urlencode($user_email)
            .'&activate_key='.urlencode($key);


作为替代方案,您也可以使用一次 http_build_query() 来构建整个查询字符串:

$params = array(
    'page_id' => $pageid, 
    'mail' => $user_email, 
    'activate_key' => $key, 
);
$query_string = http_build_query($params);

$link=get_option('home') . '/?' . $query_string;

【讨论】:

  • 我尝试使用 urlencode()。现在激活链接看起来像这样mydomain.com/…,但点击它会引发同样的错误。现在将尝试 http_build_query 选项并回复您。
  • 好的..尝试使用http_build_query并没有改变..仍然是同样的错误。激活链接中的电子邮件地址部分是 %40 而不是 @
【解决方案2】:

在 GET 参数上尝试urlencode()

【讨论】:

  • 嗨,亚历克斯,你能不能说的详细一点。。我在 php 方面不是很能干。。只能管理一些事情。
【解决方案3】:

尝试将$user_email 周围的urlencode() 转换为对URL 友好的值。

【讨论】:

  • 不..这根本没有帮助。缩小问题范围..当点击激活链接时,不知何故,“@”正在从 URL 中删除。
猜你喜欢
  • 2012-10-06
  • 2012-08-12
  • 2014-11-19
  • 2011-05-16
  • 1970-01-01
  • 2018-07-16
  • 1970-01-01
  • 2010-11-24
  • 2018-04-26
相关资源
最近更新 更多