3

我正在尝试使用 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>
4

1 回答 1

0

如果您关心此href值的显示方式,请使用 decodeURI(本机函数)。以下在 Firefox 中显示正常。

$("#linkHtml").text(decodeURI($("#link").parent().html()));

从技术上讲,据我所知,即使 Firefox 显示编码值,在提交到某个服务器后,您也应该可以接受该数据。

于 2011-09-01T11:45:07.080 回答