我正在尝试使用jQuery设置元素的href。当我在Firefox 6中设置IDN时,href是url编码的。一个例子是IDN http://räksmörgås.se,它被修改为http://r%C3%A4ksm%C3%B6rg%C3%A5s.se。当我在其他浏览器(IE8,Chrome 13,Safari 5.1)中执行相同操作时,IDN不会被编码。
我尝试这样做的原因是我让用户更改hrefs,然后通过ajax将页面内容的子集上传到Web服务器。然后我遇到问题,因为链接深埋在html字符串中;而且我不想挖掘html字符串中的所有元素。
在Firefox中设置时,有没有办法禁用href的编码?或者你有其他方法可以解决这个问题吗?
(我注意到如果href是一个有效的punycode IDN,即http://www.xn--rksmrgs-5wao1o.se,那么浏览器就很好而且花花公子。但是我必须在js中进行punycode编码,这是我不喜欢的;可能有一个或几个错误,似乎没有正式版本的编码器/解码器。)
以下html页面显示我的问题。如果您输入国际域名(复制粘贴“http://www.räksmörgås.se”),#linkHtml将获得整个元素,包括使用Firefox时损坏的href,以及使用任何其他浏览器时的正确href
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
<script>
$(document).ready(function(){
$("#linkText").focus();
$("#linkText").keyup(function() {
var href = $(this).val();
$("#link").attr('href', href);
$("#linkHtml").text($("#link").parent().html());
});
});
</script>
</head>
<body>
<div><input id="linkText" type=text /></div>
<div><a id="link" href="#">link</a></div>
<span id="linkHtml"></span>
</body>
</html>
答案 0 :(得分:0)
如果您关心如何显示此 href 值,请使用decodeURI(本机函数)。以下在Firefox中显示确定。
$("#linkHtml").text(decodeURI($("#link").parent().html()));
Techincally,据我所知,即使Firefox显示编码值,在提交给某个服务器后你也应该可以使用这些数据。