我正在嘗試使用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未被編碼。國際域名+火狐中的JQuery attr('href')問題
我試圖做到這一點的原因是,我讓用戶更改hrefs,然後通過ajax將一部分頁面內容上傳到Web服務器。然後我有問題,因爲鏈接深埋在一個html字符串中;而且我不想挖掘html字符串中的所有元素。
有沒有辦法在Firefox中設置時禁用hrefs的編碼?或者您有任何其他方式可以解決問題嗎?我注意到如果href是一個有效的punycode國際化域名,即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>
我已經看到這與未被Mozilla列入白名單的頂級域名(儘管.se應該可以:http://www.mozilla.org/projects/security/tld-idn-policy-list.html),所以也許有什麼類似的錯誤?另見:http://idn.icann.org/Firefox_Information和http://www.slideshare.net/playingwithsid/universal-acceptability – m90
嗯,它看起來對我來說還好(Firefox 6 @ ubuntu) - 更新後的href不是'終止了。 – WTK
@WTK,你是否在跨度或Firebug中檢查輸出?它好像Firebug解碼網址,所以不可能只檢查螢火蟲。 –