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


293

(GETを介して)URLで渡される文字列をエンコードしています。私が使用している場合でもescapeencodeURIまたはencodeURIComponent&置き換えられます%26amp%3Bが、私はそれを置き換えることがしたいです%26。何が悪いのですか?


文字列はどこから来たのですか?これまでに持っているコードを投稿できますか?
アンディE

1
&HTMLコンテキストでアンパサンドをエスケープする適切な方法は...ソースはどこから来ているのですか?そして、目的地は何ですか?たとえば、このサーバー側を実行することをお勧めします。
Nick Craver

HTMLの本文から何かを取得し(それがHTMLでエンコードされているため(そして、私が認識していることです))、URLで渡す必要があります...したがって、htmlをデコードする必要があります(ただし、どうやって?)次に、文字列をエンコードします(encodeURIComponentを使用して)...
dododedodonl 2010

2
それを見つけました... .text()ではなくjquery .html()で使用しました...愚かな(A)
dododedodonl

1
jQueryの.html()innerHTMLプロパティにマッピングされるため、問題は私の回答で述べたとおりです:-)
Andy E

回答:


438

コードを見ないで、暗闇の中で刺す以外に答えるのは難しいです。私が使用する適切なメソッドである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, "&"));

94

あなたが文字通りこれをした場合:

encodeURIComponent('&')

次に、結果は%26ここでテストできます。必ず、エンコードされた文字列があるだけで &なく&、それ以外の場合は、可能性の高いケースである、正しくエンコードされて...で始まるように。何らかの理由で別の結果が必要な場合は.replace(/&/g,'&')、エンコードの前にaを実行できます。


3
...それはおそらく彼の問題です。
ペッカ

2

HTMLとURIエンコーディングがあります。&される& HTMLでエンコードしながら、%26ある&URIエンコーディング

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

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

結果 %26AndOtherHTMLEncodedStuff

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.