我正在尝试使用 jQuery 设置 a 元素的 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 未编码。
我尝试这样做的原因是我让用户更改href,然后通过ajax 将页面内容的子集上传到Web 服务器。然后我遇到了问题,因为链接深埋在 html 字符串中;而且我不想挖掘 html 字符串中的所有元素。
在Firefox中设置hrefs时有什么方法可以禁用hrefs的编码?或者你有什么其他方法可以解决这个问题吗?
(我注意到,如果 href 是一个有效的 punycode IDN,即http://www.xn--rksmrgs-5wao1o.se,浏览器就很好而且很花哨。但是我必须在 js 中进行 punycode 编码,我不喜欢的东西;可能有一个或几个错误,并且似乎没有编码器/解码器的官方版本。)
以下 html 页面显示了我的问题。如果您输入国际域名(复制粘贴“http://www.räksmörgås.se”),#linkHtml 将获取整个 a 元素,如果使用 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>