我今天遇到了这个奇怪的问题。我们的页面中有一个电子邮件字段,如果用户输入:
specialcharacter123@eñe.es
然后只有在Chrome的情况下,我才会得到specialcharacter123@xn--ee-zja.es:
我试过了:
jQuery('#email').val() 和
document.getElementById('email').value 两者都给了我相同的结果。(它在Safari中运行良好)。
另外,我在页面中已经有了这个:
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我不能得到任何线索,这里出了什么问题。
发布于 2014-07-18 15:06:17
域名只能包含ASCII字符,请参阅Internationalized domain name。在处理请求时,URL可以很好地工作,但如果您想要将其显示为UTF8,则需要将其转换。对于不同的语言,有不同的解决方案,对于JavaScript你可以使用punycode.js。
发布于 2020-09-06 02:41:42
根据w3.org关于输入type=email的电子邮件地址输入控件:
ABNF值:与以下
生产匹配的任何字符串:
1*( atext / ".“) "@”ldh-str 1*( ".“ldh-字符串)
…其中,atext如RFC 5322中所定义,而ldh-str如RFC 1034中所定义。
也就是说,匹配以下正则表达式的任何字符串:
/^a-zA-Z0-9.!#$%&’_+/=?^_`{|}~-+@a-zA-Z0-9-+(?:.a-zA-Z0-9-+)_$/
来源:https://www.w3.org/TR/2012/WD-html-markup-20120329/input.email.html
从上面的正则表达式可以看出,输入的值不能包含非ascii字符。这是有问题的,因为电子邮件地址有时确实包含非ascii。Chrome所做的一切只是(愚蠢地)对电子邮件地址的域名部分进行了punycode编码,这样它就可以满足w3c的要求。他们应该做的就是不去管它,因为不言而喻,表单验证应该要么接受用户的输入,要么拒绝它,但永远不会改变它。
发布于 2014-07-18 16:29:36
这真的很奇怪;但我已经通过以下更改修复了这个问题:
来自:的
<input type="email" id="email" ></input>TO:
<input type="text" id="email" ></input> 类型从email更改为text,现在可以正常工作了。(这个解决方案还有其他问题,但我可以接受)。在Chrome中,type='email'不能像预期的那样工作。带重音的字符正在被转换为punycode。
https://stackoverflow.com/questions/24818970
复制相似问题