Javascript 未正确检索重音字符
我今天遇到了这个奇怪的问题。我们的页面中有一个电子邮件字段,如果用户输入:Javascript 未正确检索重音字符,javascript,jquery,html,google-chrome,Javascript,Jquery,Html,Google Chrome,我今天遇到了这个奇怪的问题。我们的页面中有一个电子邮件字段,如果用户输入: specialcharacter123@e涅e.es 只有在Chrome的情况下,我才能得到specialcharacter123@xn--ee zja.es: 我试过: jQuery('#email').val() 及 两个都给了我同样的结果。(它在Safari中运行良好) 另外,我在页面中已经有了: <meta charset="utf-8" /> <meta http-equiv="Cont
specialcharacter123@e涅e.es 只有在Chrome的情况下,我才能得到
specialcharacter123@xn--ee zja.es
:
我试过:
jQuery('#email').val()
及
两个都给了我同样的结果。(它在Safari中运行良好)
另外,我在页面中已经有了:
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我不知道这里出了什么问题。域名只能包含ASCII字符,请参阅。URL在执行请求时可以正常工作,但是如果您想将其显示为UTF8,则需要将其转换。各种语言都有各种各样的解决方案,你可以使用JavaScript。这真的很奇怪;但我已通过以下更改解决了此问题: 发件人:
<input type="email" id="email" ></input>
至:
<input type="text" id="email" ></input>
类型从
email
更改为text
,现在工作正常。(这个解决方案还有其他问题,但我可以接受)。在Chrome中,type='email'
未按预期工作。重音字符正被转换成punycode 根据w3.org关于输入类型=电子邮件–电子邮件地址输入控制:
值:与以下[ABNF]产品匹配的任何字符串:
1*(atext/“)”@“ldh str 1*(““ldh str”)
…其中atext的定义见[RFC 5322],ldh str的定义见[RFC 5322]
[RFC1034]
即,匹配以下正则表达式的任何字符串:
/^[a-zA-Z0-9.!#$%&'+/=?^ `{124;}-]+@[a-zA-Z0-9-]+(?:[a-zA-Z0-9-]+)$/
资料来源:
从上面的正则表达式可以看出,输入的值不能包含非ascii字符。这是有问题的,因为电子邮件地址有时确实包含非ascii码。Chrome所做的只是(愚蠢地)对电子邮件地址的域部分进行punycode编码,以便它能够满足w3c的要求。他们应该做的是不去管它,因为不用说表单验证要么接受用户的输入,要么拒绝用户的输入,但永远不要更改它
<input type="text" id="email" ></input>