在Chrome中输入带有重音字符的电子邮件值

zaqlnxep  于 2023-11-14  发布在  Go
关注(0)|答案(4)|浏览(146)

当在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,这里发生了什么,我该如何绕过它?

xtfmy6hx

xtfmy6hx1#

我认为这不是一个错误,这是因为规范。Chrome只是以与其他浏览器不同的方式遵循规范:)并将IDN转换为其ASPLEMENTARY表示。
https://code.google.com/p/chromium/issues/detail?id=410937
要将其解码回来,您可以使用一些第三方解决方案,例如
Converting punycode with dash character to Unicode

izj3ouym

izj3ouym2#

对于再次遇到这个问题的其他人,我建议使用punycode npm包。https://www.npmjs.com/package/punycode
我认为只有Chrome会将电子邮件编码成punycode。没有办法阻止Chrome进行punycoding。你只需要让她做她的工作并在后端解码punycode。

const punycode = require('punycode')
let data = request.only(['email'])
data['email'] = punycode.toUnicode(data['email'])

字符串
像阿多尼斯的魅力和我的头痛消失了。

00jrzges

00jrzges3#

在我这边,我刚刚将输入字段的类型从电子邮件更改为文本,现在它工作正常。
这是

<input id="Email" name="Email" type="email">

字符串
现在是

<input id="Email" name="Email" type="text">

irtuqstp

irtuqstp4#

Fiddle

<form>
    <input id="email2" type="text"placeholder="[email protected]" autofocus required pattern="[^ @]*@[^ @]*">
    <input type ="submit">
</form>

字符串
这个问题是因为输入的电子邮件类型,在'@'符号后浏览器给出了这个错误。我认为他们认为电子邮件地址总是必须是英文的。
无论如何使用文本类型然后提供电子邮件正则表达式

相关问题