jquery - 国际域名 + JQuery attr ('href' ) Firefox 中的问题

标签 jquery firefox idn

我正在尝试使用 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 字符串中的所有 a 元素。

在 Firefox 中设置 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>

最佳答案

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

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

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

关于jquery - 国际域名 + JQuery attr ('href' ) Firefox 中的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268861/

相关文章:

jquery - 元素的固定定位?

javascript - jquery中如何将mouseover和mouseleave事件与不同的目标关联起来?

javascript - 对多个元素使用相同的函数

javascript - 为什么 FireFox window.onbeforeunload() 仅在显示确认对话框时触发?

Firefox WebSockets

facebook - IDN 域和 Facebook Connect

jquery - ASP.NET TabContainer 和 Bootstrap 冲突

java - WebDriver for Firefox : browser starts w/empty page, 挂起 2 分钟,重新启动,然后测试运行。为什么?

php - 在 PHP 中拆分 IDN URL

mod-rewrite - 如何将 s 域名重写为原始 IDN 而不是 punycode?