web-dev-qa-db-ja.com

URLエンコードでは、「&」(アンパサンド)が「&」HTMLエンティティとして認識されます。

私はURLで(GET経由で)渡される文字列をエンコードしています。しかし、escapeencodeURIencodeURIComponentのいずれかを使用すると、&%26amp%3Bに置き換えられますが、%26に置き換えます。何がおかしいのですか?

290
dododedodonl

あなたのコードを見ないで、暗闇の中で突き刺す以外に答えるのは難しいです。 encodeURIComponent() に渡す文字列は、 innerHTML プロパティにアクセスした結果であると思います。解決策は、 innerText / textContent プロパティ値を代わりに取得することです。

var str, 
    el = document.getElementById("myUrl");

if ("textContent" in el)
    str = encodeURIComponent(el.textContent);
else
    str = encodeURIComponent(el.innerText);

そうでない場合は、 replace() メソッドを使用してHTMLエンティティを置き換えることができます。

encodeURIComponent(str.replace(/&/g, "&"));
430
Andy E

あなたが文字通りこれをしたならば:

encodeURIComponent('&')

結果は%26です、 ここでテストできます 。エンコードしている文字列が just &であり、&ではないことを確認してください。それ以外の場合は正しくエンコードされています。何らかの理由で別の結果が必要な場合は、エンコードの前に.replace(/&/g,'&')を実行できます。

93
Nick Craver

HTMLとURIのエンコーディングがあります。 &&HTMLでエンコード ですが、%26URIエンコード&です。

文字列をURIエンコードする前に、HTMLデコードしてからURIエンコードすることをお勧めします。

var div = document.createElement('div');
div.innerHTML = '&AndOtherHTMLEncodedStuff';
var htmlDecoded = div.firstChild.nodeValue;
var urlEncoded = encodeURIComponent(htmlDecoded);

結果%26AndOtherHTMLEncodedStuff

これが時間を節約することを願っています

2