【发布时间】:2012-01-15 04:51:31
【问题描述】:
对于我的电子邮件确认脚本,我通过我现有的单向加密功能运行用户的电子邮件地址,然后从它的中间抓取 20 个字符来生成一个令牌。我将令牌作为 $_GET 变量或 $_POST 变量从用户那里取回。我遇到了一个“错误”,当输入一个包含加号 (+) 的电子邮件地址,然后将该令牌作为 $_GET 变量从用户那里检索回来时,加号将转换为空格和哈希更改,因此令牌不再匹配。
那么,我想知道解决这个问题的最佳方法是什么?逃避加号?转换加号? URL编码呢?当我使用 $_GET 时,还有哪些其他字符会发生这种情况?
以下是相关代码,以防有用:
<?php
if (isset ($_GET['email'], $_GET['token'])) {
$email = strtolower (mysql_real_escape_string($_GET['email']));
$token = mysql_real_escape_string($_GET['token']);
$correctToken = substr (doEncrypt ($email), -26, -6);
}elseif (isset ($_POST['submit'])) {
$email = strtolower (mysql_real_escape_string($_POST['email']));
$token = mysql_real_escape_string($_POST['token']);
$correctToken = substr (doEncrypt ($email), -26, -6);
}
if (isset ($email, $token, $correctToken)){
if ($token == $correctToken) {
// Confirm user's email!
}
}
?>
非常感谢! 比利
编辑:好的,所以此时最大的问题是,加号是唯一在通过 $_GET 检索时转换为空格的字符吗?如果是,那么我似乎可以在 $_GET 部分中添加:$email = str_replace(' ', '+', $email); 电子邮件地址中没有其他原因,对吧?
再次感谢, 比利
【问题讨论】:
-
是的,
urlencode是最合适的(在您通过电子邮件发送该网址之前)。
标签: php get special-characters urlencode