Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Input type email value in Chrome with accented characters wrong

When entering accented characters into an input type email in Chrome, it changes the value to something strange.

When entering the email: test@Bücher.ch the input value becomes: [email protected].

$('#email').val() // --> [email protected]
document.getElementById('email').value // --> [email protected]

This does not happen with an input type text, or in other major browsers.

See this fiddle for example. What is going on here and how do I get around it?

like image 558
TheGwa Avatar asked Aug 20 '15 11:08

TheGwa


Video Answer


2 Answers

For others who face this problem again, I suggest use punycode npm package. https://www.npmjs.com/package/punycode

I think only Chrome encodes email into punycode. There is no way to prevent Chrome from punycoding. You just let her do her work and decode punycode in backend.

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

Worked like charm in adonis and my headache disappeared.

like image 182
glinda93 Avatar answered Oct 16 '22 23:10

glinda93


I think it's not an error, it's because of the specification. Chrome just follows the specification in a different way than other browsers:) and translate the IDN into its ascii representation.

https://code.google.com/p/chromium/issues/detail?id=410937

To decode it back you can use some 3rd party solution such as

Converting punycode with dash character to Unicode

like image 28
Lukas Kral Avatar answered Oct 17 '22 00:10

Lukas Kral