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.