我今天遇到了这个奇怪的问题。我们的页面中有一个电子邮件字段,如果用户输入:
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" />
我无法弄清楚这里有什么问题。
答案 0 :(得分:1)
域名只能包含ASCII字符,请参阅Internationalized domain name。在执行请求时,URL将正常工作,但如果要将其显示为UTF8,则需要对其进行转换。各种语言都有各种解决方案,对于JavaScript,您可以使用punycode.js。
答案 1 :(得分:0)
这真的很奇怪;但我通过以下更改修复了此问题:
FROM:
<input type="email" id="email" ></input>
TO:
<input type="text" id="email" ></input>
类型已从email
更改为text
,现在工作正常。 (此解决方案还有其他问题,但我可以使用)。在Chrome中type='email'
未按预期运行。重音字符被转换为punycode。
答案 2 :(得分:0)
根据w3.org关于输入type = email –电子邮件地址输入控件:
值:与以下[ABNF]生产匹配的任何字符串:
1 *(atext /“。”)“ @” ldh-str 1 *(“。” ldh-str)
…其中,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的要求。他们应该做的事情就任其保留,因为不用说表单验证应该接受用户的输入还是拒绝用户的输入,但永远不要更改它。