3

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>
4

1 に答える 1

0

このhref値の表示方法が気になる場合は、decodeURI (ネイティブ関数) を使用してください。以下は Firefox で OK を表示します。

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

技術的には、私の知る限り、Firefox がエンコードされた値を表示していても、サーバーに送信した後はそのデータで問題ないはずです。

于 2011-09-01T11:45:07.080 に答える