jQuery を使用して a 要素の href を設定しようとしています。Firefox 6 で IDN を設定すると、href が URL エンコードされます。1 つの例は、 http://r%C3%A4ksm%C3%B6rg%C3%A5s.seにマングルされた IDN http: //räksmörgås.seです。他のブラウザー (IE8、Chrome 13、Safari 5.1) で同じことをすると、IDN がエンコードされません。
私がこれをやろうとしている理由は、ユーザーにhrefを変更させてから、ajaxによってページコンテンツのサブセットをWebサーバーにアップロードできるようにするためです。リンクがhtml文字列の奥深くに埋め込まれているため、問題が発生します。そして、html 文字列内のすべての a 要素を掘り下げたくないのです。
Firefox で設定するときに、href のエンコードを無効にする方法はありますか? または、問題を解決する他の方法はありますか?
(href が有効な punycode IDN、つまりhttp://www.xn--rksmrgs-5wao1o.seである場合、ブラウザーは問題なくダンディであることに気付きました。しかし、js で punycode エンコーディングを行う必要があります。 1 つまたは複数のバグがある可能性があり、エンコーダー/デコーダーの公式リリースはないようです。)
次の html ページに私の問題が表示されます。国際ドメイン名を入力すると (「http://www.räksmörgås.se」をコピーして貼り付けます)、#linkHtml は、Firefox を使用している場合は破損した href を含む a 要素全体を取得し、他のブラウザーを使用している場合は正しい 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>