[javascript] URL 인코딩은 “&”(앰퍼샌드)를 “& amp;” HTML 엔터티

URL에 전달 될 문자열을 인코딩하고 있습니다 (GET을 통해). 내가 사용한다면 escape, encodeURI또는 encodeURIComponent, &로 대체됩니다 %26amp%3B,하지만 난 그것으로 대체 할 %26. 내가 뭘 잘못하고 있죠?



답변

코드를 보지 않으면 어둠 속에서 찌르는 것 외에는 대답하기가 어렵습니다. 올바른 메소드 인 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, "&"));


답변

말 그대로 이것을했다면 :

encodeURIComponent('&')

결과가 다음 %26, 당신은 여기를 테스트 할 수 있습니다 . 있는지 확인합니다 인코딩 된 문자열입니다 & 하지 &, 그렇지 않으면 가능성이 어떤 경우인지, 제대로 인코딩되어 …로 시작합니다. 어떤 이유로 다른 결과가 필요한 경우 .replace(/&/g,'&')인코딩 전에 수행 할 수 있습니다 .


답변

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

희망이 시간을 절약


답변