source

URL 인코딩에서는 "&"(앰퍼샌드)를 "&" HTML 엔티티로 간주합니다.

gigabyte 2022. 9. 6. 22:20
반응형

URL 인코딩에서는 "&"(앰퍼샌드)를 "&" HTML 엔티티로 간주합니다.

(GET 경유로) URL로 전달되는 문자열을 인코딩하고 있습니다.하지만 만약 내가 사용한다면escape,encodeURI또는encodeURIComponent,&로 대체됩니다.%26amp%3B대체해 주셨으면 합니다.%26내가 뭘 잘못하고 있지?

암호를 보지 않고서는 어둠을 찌르는 것 말고는 대답하기 어렵다.부호화하려는 문자열이올바른 사용방법인 URIComponent()는 내부 액세스 결과에서 생성됩니다.HTML 속성해결책은 대신 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인코딩으로.

따라서 문자열을 인코딩하기 전에 HTML을 디코딩한 후 URI를 인코딩해야 합니다.

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

결과%26AndOtherHTMLEncodedStuff

이것으로 시간이 절약되기를 바랍니다.

그걸 분명히 하기 위해서, 당신이 사용하고는 안 된다.encodeURI()그리고.encodeURIComponent()동의하지 않으면 결과를 보세요...

console.log(encodeURIComponent('@#$%^&*'));

입력:^&*.

출력:%40%23%24%25%5E%26*.

그건 옳지 않죠, 그렇죠? *변환되지 않았습니다!서버 사이드 클렌징 기능으로 쓰시는 게 아니길 바랍니다.*입력으로 처리되지 않고 명령으로 처리됩니다.즉, 사용자의 주장 파일을 삭제한다고 가정해 주세요.rm *encodeURI() 또는 encode를 사용하고 있지 않은지 확인합니다.URIComponent()!

TLDR: 와 를 실제로 필요로 합니다.

MDN encodeURI()...

function fixedEncodeURI(str) {
   return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}

MDN 부호화URIComponent() 문서...

function fixedEncodeURIComponent(str) {
 return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
   return '%' + c.charCodeAt(0).toString(16);
 });
}

이러한 기능을 사용하여fixedEncodeURI()단일 URL 조각을 인코딩하는 반면,fixedEncodeURIComponent()는 URL 조각 및 커넥터를 인코딩합니다.또는 간단히 말하면,fixedEncodeURI()부호화되지 않음+@?=:#;,$&(과 같이)&그리고.+공통 URL 연산자)입니다만,fixedEncodeURIComponent()할 것이다.

자, 좋아!

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

반응형