Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未正确检索重音字符_Javascript_Jquery_Html_Google Chrome - Fatal编程技术网

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>