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
희망이 시간을 절약