【发布时间】:2014-01-03 01:19:29
【问题描述】:
我想在 php 中创建一个邮件功能,让访问者创建和激活用户帐户。为此,我发了一封邮件,其中包含一个链接,该链接指向激活帐户的页面。现在的问题是有些人想使用干扰电子邮件中代码的字符。例如:“”和“”。我试图转义这些字符,但是当出现这样的字符时,链接将变为非活动状态。邮件已发送,但链接无法点击。
这就是代码的样子。
变量在 PHP 中设置
$New_user->Username = $db->real_escape_string($_POST['un']);
$RawUn = $_POST['un'];
$New_user->Password = $_POST['pw'];
$New_user->Email = $_POST['em'];
$CheckEmail = explode("@", $New_user->Email);
$New_user->Country = $_POST['cn'];
$New_user->City = $_POST['ct'];
//$NEW_USER IS AN OBJECT CREATED TO HOLD ACCOUNT INFORMATION SUCH AS USERNAME AND EMAIL
//$RAWUN IS A VARIABLE TO HAVE AN UNESCAPED VALUE OF THE USERNAME TO INSERT IN THE INPUT FIELD IF SOMETHING WENT WRONG
检查值后,发送邮件:
$message = array(
'Hello ' . $New_user->Username . ',<br/>',
'<br/>',
'Welcome to MakeAMemo.<br/>',
'To start working with your account you will have to activate it.<br/>',
'Just click on the <a href="localhost/makeamemo.com/ConfirmAccount.php?Un=' . str_replace(" ", "+", $New_user->Username) . '&Em=' . $db->real_escape_string($New_user->Email) . '&Action=Create">link</a> and you are ready to go.<br/>',
'Log in and check if it works. If not, please contact us(E-mail is on the website).<br/>',
'Your password: ' . $New_user->Password . '<br/>',
'<br/>',
'Kind regards,<br/>',
'<br/>',
'Administration');
$header = array(
'From: makeamemoofficial@gmail.com',
'Reply-To: makeamemoofficial@gmail.com',
'Content-type: text/html');
mail($New_user->Email,"MakeAMemo => New account",implode("\r\n", $message),implode("\r\n", $header));
我已经与数据库建立了连接,因此使用 $db->real_escape_string 进行转义可以正常工作。 链接的位置将在网站完成后更改。 我检查了代码是否在没有 href 中的 str_replace 的情况下工作。没有成功。我没有成功尝试不逃避用户名。 标签在邮件中是不可见的,因此可以识别。该链接没有被阻止,因为当我不使用特殊字符时它确实有效。当把双引号变成单引号时,你的效果是反转的,这意味着代替“”,''不起作用。 我认为标题与它无关,因为链接在使用普通字符时确实有效。
知道我的问题的原因是什么吗? 每一个答案都值得赞赏。
aear11:这里是生成的标签:
<a href="localhost/makeamemo.com/ConfirmAccount.php?Un=%22s+avonds&Em=dennis.heutinck%40gmail.com&Action=Create">link</a>
"s avonds 是一个不正确的荷兰语单词,其中包含一些需要测试的字符。
【问题讨论】:
-
该链接对我来说似乎有效。应该转换为 url 安全字符的所有内容似乎都是。如果您将此链接复制/粘贴到浏览器中,它可以工作吗?
-
我用新的建议更新了下面的答案。