2010-08-22 4 views
283

URL로 전달되는 문자열을 GET을 통해 인코딩합니다. 그러나 escape을 사용하는 경우 encodeURI 또는 encodeURIComponent, &%26amp%3B으로 바뀌지 만 %26으로 바꿔야합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?URL 인코딩에서 "&"(앰퍼샌드)가 "&"으로 표시됩니다. HTML 엔터티

+0

문자열이 어디에서 오는가이 당신에게 시간을 절약 할 수 그것을 :

var div = document.createElement('div'); div.innerHTML = '&AndOtherHTMLEncodedStuff'; var htmlDecoded = div.firstChild.nodeValue; var urlEncoded = encodeURIComponent(htmlDecoded); 

결과 %26AndOtherHTMLEncodedStuff

희망을 인코딩 에서? 지금까지 가지고있는 코드를 게시 할 수 있습니까? –

+1

'&'은 HTML 컨텍스트에서 앰퍼샌드를 벗어나는 적절한 방법입니다 ... 소스는 어디서 오는가? 목적지는 무엇입니까? 예를 들어이 서버 측을 수행하는 것이 더 나을 수도 있습니다. –

+0

나는 HTML 몸체에서 무엇인가를 잡아 먹는다. (HTML 형식으로 인코딩되었으므로 (지금은 &이다.)) 나는 그것을 URL에 전달해야한다. 그래서, html을 디코딩 할 필요가있다. 그런 다음 encodeURIComponent를 사용하여 문자열을 인코딩합니다 ... – dododedodonl

답변

422

코드를 보지 않고도 어둠 속에서 찌르는 것 외에는 대답하기가 어렵습니다. 사용하려는 올바른 방법 인 인 encodeURIComponent()에 전달하는 문자열이 innerHTML 속성에 액세스 한 결과에서 비롯된 것 같습니다.

var str, 
    el = document.getElementById("myUrl"); 

if ("textContent" in el) 
    str = encodeURIComponent(el.textContent); 
else 
    str = encodeURIComponent(el.innerText); 

을 즉, 당신은 HTML 엔티티를 대체 할() 메소드 대체 를 사용할 수있는 경우가 아니라면 :이 솔루션은 대신 innerText와/는 TextContent 속성 값을 얻을 수 있습니다

encodeURIComponent(str.replace(/&/g, "&")); 
91

말 그대로이 한 경우 :

encodeURIComponent('&') 

가 그런 결과가 you can test it here%26입니다. 인코딩하려는 문자열이 이고 문자가&이 아니고 &이 아니라 ... 시작해야합니다. 그렇지 않으면 인코딩이 올바르게되어있는 것 같습니다. 어떤 이유로 든 다른 결과가 필요한 경우 인코딩 전에 .replace(/&/g,'&')을 수행 할 수 있습니다.

+3

에서 말했듯이 ... 아마 그 자신의 문제입니다. –

2

HTML 및 URI 인코딩이 있습니다. &&encoded in HTML이고, %26은 이다.

그래서 URI 당신의 문자열을 인코딩하기 전에 디코딩을 HTML로 할 수 있습니다 다음 URI는