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


293

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


줄은 어디에서 왔습니까? 지금까지 가지고있는 코드를 게시 할 수 있습니까?
— Andy E

1
&HTML 컨텍스트에서 앰퍼샌드를 피할 수있는 올바른 방법입니다 ... 소스는 어디서 왔습니까? 그리고 목적지는 무엇입니까? 예를 들어이 서버 쪽을 수행하는 것이 좋습니다.
— Nick Craver

HTML 본문에서 무언가를 가져 와서 HTML로 인코딩하고 (지금은 알고 있습니다) URL로 전달해야합니다. 그래서 HTML을 해독해야합니다 (그러나 어떻게?) ko 그런 다음 문자열을 인코딩합니다 (encodeURIComponent 사용).
— dododedodonl

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,'&')인코딩 전에 수행 할 수 있습니다 .


3
... 아마도 그의 문제 일 것입니다.
— Pekka

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.