当在Chrome的输入类型电子邮件中输入重音字符时,它会将值更改为一些奇怪的东西。
当输入电子邮件:test@Bücher.ch 时,输入值变为:* email protected(https://stackoverflow.com/cdn-cgi/l/email-protection) *。
$('#email').val() // --> [email protected]
document.getElementById('email').value // --> [email protected]
字符串
这不会发生在输入类型文本或其他主要浏览器中。
比如这个fiddle,这里发生了什么,我该如何绕过它?
4条答案
按热度按时间xtfmy6hx1#
我认为这不是一个错误,这是因为规范。Chrome只是以与其他浏览器不同的方式遵循规范:)并将IDN转换为其ASPLEMENTARY表示。
https://code.google.com/p/chromium/issues/detail?id=410937
要将其解码回来,您可以使用一些第三方解决方案,例如
Converting punycode with dash character to Unicode的
izj3ouym2#
对于再次遇到这个问题的其他人,我建议使用
punycode
npm包。https://www.npmjs.com/package/punycode我认为只有Chrome会将电子邮件编码成punycode。没有办法阻止Chrome进行punycoding。你只需要让她做她的工作并在后端解码punycode。
字符串
像阿多尼斯的魅力和我的头痛消失了。
00jrzges3#
在我这边,我刚刚将输入字段的类型从电子邮件更改为文本,现在它工作正常。
这是
字符串
现在是
型
irtuqstp4#
Fiddle
字符串
这个问题是因为输入的电子邮件类型,在'@'符号后浏览器给出了这个错误。我认为他们认为电子邮件地址总是必须是英文的。
无论如何使用文本类型然后提供电子邮件正则表达式