有没有办法对可以在codeigniter中用作网址一部分的电子邮件地址进行编码?我需要从网址解码回电子邮件地址。
我想要做的只是忘记密码恢复的事情。我发送了一个确认链接到用户的电子邮件地址,链接需要像../encodedEmail/forgottenPasswordCode
(在数据库中为已提交电子邮件的用户更新了forgottenPasswordCode
。
当用户访问该链接时,我会对电子邮件进行解码(如果email - forgottenPasswordCode
对在表中),我允许他们重置密码(我将forgottenPasswordCode
重置为null)。
我可以做一个循环 - 使用select { - 或 - 设置forgottenPasswordCode
列唯一的表来检查表,所以我继续生成插入失败(会更快吗?) - 直到我生成表中尚不存在的forgottenPasswordCode
。
但我这样做的人不会这样接受它:)。他希望用用户的电子邮件完成检查,他认为它的速度要快得多。
我正在使用codeigniter,我使用了它的encode()函数,它似乎会产生像'-slashes-'这样的字符,有时会破坏encoded-email-string。
还有其他想法吗?
答案 0 :(得分:1)
尝试使用bin2hex()和hex2bin()函数,
<?php
function hex2bin($str)
{
$bin = "";
$i = 0;
do
{
$bin .= chr(hexdec($str{$i}.$str{($i + 1)}));
$i += 2;
} while ($i < strlen($str));
return $bin;
}
$str = 'email@website.com';
$output = bin2hex($str);
echo $output . '<br/>';
echo hex2bin($output);
?>
答案 1 :(得分:1)
不要将数据放在没有某种含义的URL中。这留下了两个选择:
将地址作为POST的一部分发送。如果它来自网络表单,那么这就是要走的路。
使用ID或散列值引用数据库中的地址。如果您需要用户点击引用其帐户的链接,请使用明确引用其帐户的内容。如果您需要引用密码重置的实例(许多系统执行此操作),请在URL中使用该哈希添加包含哈希的表。
为什么不在URL中对其进行编码?
尝试在URL中保留参数以清除对Web应用程序中概念的引用(例如,通过ID或纯文本名称指向一个用户)。不适合URL的参数在POST参数中。如果必须使用URL中编码的内容,则首选单向编码和数据库查找。
答案 2 :(得分:0)
虽然使用电子邮件作为部分网址可能不是最佳设计解决方案, 使用电子邮件作为base64编码的字符串,以避免任何特殊字符的问题
E.g。 Base64编码字符串&#39; abc-def@example.com'是
YWJjLWRlZkBleGFtcGxlLmNvbQ==
在您的情况下,网址为
../YWJjLWRlZkBleGFtcGxlLmNvbQ==/forgottenPasswordCode
您只需要在使用前解码该字符串