无法正确检索重音字符

时间:2014-07-18 06:58:11

标签: javascript jquery html google-chrome

我今天遇到了这个奇怪的问题。我们的页面中有一个电子邮件字段,如果用户输入:
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" />  

我无法弄清楚这里有什么问题。

3 个答案:

答案 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的要求。他们应该做的事情就任其保留,因为不用说表单验证应该接受用户的输入还是拒绝用户的输入,但永远不要更改它。

相关问题