0

我发送给用户的验证链接有一个奇怪的问题。出于某种原因,在 MD5 字符串中插入了一个额外的空格,该空格被编码为“%20”并弄乱了我的验证链接。

我有以下简单的 PHP 来生成 MD5 验证字符串:

echo "<input type='hidden' name='unique_id' value='" . md5($event['date_submitted']) . "' />";

提交日期的格式为2012-09-19 16:21:19.

我有以下 jQuery,它获取字符串并POST使用唯一 ID 对数据库进行更新,并将链接通过电子邮件发送给用户:

$("#form1_review_form").submit(function(event) {
    event.preventDefault();

    var email = $(this).find("input[name='email']").val(),
        message = message_box.val(),
        alloc_id = $(this).find("input[name='alloc_id']").val(),
        unique_id = $(this).find("input[name='unique_id']").val();

        var informed_message = "<a href='MY_DOMAIN/MY_PHP_FILE.php?id=" + unique_id + "&alloc_id=" + alloc_id + "'>Click here</a>!</p>";
        mail(email, "", "FROM", "SUBJECT", informed_message, "");

        $.post(
            "update_form_url.php",
            { update: "lead_revise", alloc_id: alloc_id, unique_id: unique_id },
            function(data) {
                // do stuff
            }
        );  
});

mail()上面的代码中是一个包装器,它向使用 PHP发送电子邮件POST的 PHP 文件发出请求。mail()

任何想法为什么要添加空格并因此编码为“%20”?因为在数据库中,该unique_id字段不包含任何空格,并且日期的MD5不包含任何空格。

任何帮助深表感谢。

4

1 回答 1

0

这很正常,请阅读此http://php.net/manual/en/function.urldecode.php

如果你想删除它们,你可以随时使用trim

我很仓促,让我解释一个适当的解决方案。我建议开始做一些调试,空格是否出现在PHP中?简单地回显它并查看结果。在 JS 中使用控制台登录,并让我们保持更新。此外,如果 md5 的长度为 32 位并且末尾出现“”(第 33 位),为什么不修剪它呢?但我怀疑它出现在 php

于 2013-01-23T18:46:48.097 回答