IE没有在GET表单上传递@符号用于电子邮件输入

时间:2009-08-06 19:49:58

标签: javascript html webforms

我正在尝试通过GET表单传递电子邮件,但在IE中,它使用GET参数删除页面上的@符号。我正在使用onSubmit事件,但所有这些都是在让它们提交之前验证数据,它不会触及任何表单值。

<form name="quick" id="ex" action="order" autocomplete="off" method="GET" onsubmit="return validateQuickForm(this);">
<input id="eMail" value="" name="email" onblur="validateField(this, VALIDATE_EMAIL, false)" type="text">
....
<input src="/images/button.gif" value="Submit" alt="Submit" title="Continue to order form" type="image">
</form>

假设我输入user@example.org ..

它应该将我重定向到

example.org/order/?email=user%40example.org

但它会将我重定向到

example.org/order/?email=userexample.org

它在Firefox中运行良好..

以下是javascript函数,以防万一:

function validateQuickForm(form) {
    var errors = new Array();
    if (VALIDATE_EMAIL(form.email) == false) 
        errors.push("That's not a valid email!");
    if (errors.length > 0) {
        var errorMsg = "Please fill out all fields correctly:";
        for(var i = 0; i < errors.length; i++)
            errorMsg += "\r\n-"+errors[i];
        alert(errorMsg);
        return false;
    }
    return true;
}

此外,我已经删除了javascript和事件,它仍然删除了@无论

3 个答案:

答案 0 :(得分:1)

其他因素导致您的问题。如果您取出javascript,“@”会在查询字符串中正确发送。 “VALIDATE_EMAIL”函数是否设置了INPUT字段的值?我的猜测是它正在IE中剥离它。

答案 1 :(得分:0)

@在URL中的主机名之前可以表示身份验证信息。我知道这一支持已经从IE中删除了一段时间,出于安全考虑,也许他们过度了。

参见例如http://gadgetopia.com/post/2027http://www.ietf.org/rfc/rfc1738.txt的第3.1节。

在提交表单之前,您是否尝试过对其进行URL编码?

答案 2 :(得分:0)

好吧,我刚刚结束使用POST而且没有任何问题。由于伪安全原因,IE可能会过滤掉@。我确信有一个解决方法是使用GET进行电子邮件,但替代方案(POST)更容易,并且不需要任何黑客来解决。