IT

URL 인코딩은 "&"(앰퍼샌드)를 "&"HTML 엔터티로 인식

lottoking 2020. 3. 18. 23:19
반응형

URL 인코딩은 "&"(앰퍼샌드)를 "&"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

희망이 시간을 절약

참고 URL : https://stackoverflow.com/questions/3541711/url-encode-sees-ampersand-as-amp-html-entity

반응형