2 Stimmen

Akzentuierte Zeichen werden nicht korrekt abgerufen

Heute bin ich auf dieses seltsame Problem gestoßen. Auf unserer Seite gibt es ein E-Mail-Feld, und wenn ein Benutzer eingibt:
specialcharacter123@eñe.es

Erhalte ich nur im Falle von Chrome specialcharacter123@xn--ee-zja.es :

Ich habe versucht:

jQuery('#email').val()  

Und

document.getElementById('email').value    

Beide haben mir die gleichen Ergebnisse geliefert. (Es funktioniert einwandfrei in Safari).

Außerdem habe ich bereits dies auf der Seite:

Ich kann keine Hinweise darauf finden, was hier falsch läuft.

2voto

PHP Guru Punkte 1161

Laut w3.org zum Eingabetyp E-Mail - E-Mail-Adresseneingabesteuerung:

Wert: Jede Zeichenfolge, die mit der folgenden [ABNF]-Produktion übereinstimmt:

1*( atext / "." ) "@" ldh-str 1*( "." ldh-str )

... wobei atext wie in [RFC 5322] definiert ist und ldh-str wie in [RFC 1034] definiert ist.

D. h., jede Zeichenfolge, die mit dem folgenden regulären Ausdruck übereinstimmt:

/^[a-zA-Z0-9.!#$%&’+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)$/

Quelle: https://www.w3.org/TR/2012/WD-html-markup-20120329/input.email.html

Wie aus dem obigen regulären Ausdruck ersichtlich ist, darf der eingegebene Wert keine Nicht-ASCII-Zeichen enthalten. Dies ist problematisch, da E-Mail-Adressen manchmal Nicht-ASCII-Zeichen enthalten. Alles, was Chrome getan hat, ist (dumm) den Domain-Teil der E-Mail-Adresse in Punycode zu codieren, damit es den Anforderungen der w3c entspricht. Was sie hätten tun sollen, ist es unverändert zu lassen, da es selbstverständlich ist, dass die Formularvalidierung entweder die Eingabe des Benutzers akzeptieren oder ablehnen sollte, aber niemals ändern.

1voto

jgillich Punkte 64220

Domainnamen können nur ASCII-Zeichen enthalten, siehe Internationalisierten Domain-Namen. Die URL funktioniert einwandfrei bei Anfragen, aber wenn Sie sie als UTF8 anzeigen möchten, müssen Sie sie umwandeln. Es gibt verschiedene Lösungen für verschiedene Sprachen, für JavaScript könnten Sie punycode.js verwenden.

0voto

Rakesh Juyal Punkte 34371

Dies ist wirklich seltsam; Aber ich habe dieses Problem behoben, indem ich folgende Änderungen vorgenommen habe:

VON:

ZU:

Der Typ wurde von email auf text geändert und jetzt funktioniert es einwandfrei. (Diese Lösung hat andere Probleme, aber damit kann ich leben). In Chrome funktioniert type='email' nicht wie erwartet. Akzentuierte Zeichen werden in Punycode konvertiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X