programing

Firefox는 url에서 인코딩된 매개 변수를 자동으로 디코딩하며 IE에서 발생하지 않습니다.

mytipbox 2023. 8. 26. 16:18
반응형

Firefox는 url에서 인코딩된 매개 변수를 자동으로 디코딩하며 IE에서 발생하지 않습니다.

저는 파이어폭스와 IE, 대부분 파이어폭스 사이에서 좌절감을 느끼고 있습니다. 왜냐하면 자바스크립트로 작업하기 전에 해시의 매개 변수를 자동으로 디코딩하기 때문입니다.IE는 URL을 자동으로 디코딩하지 않으므로 읽기 오류가 발생하지 않습니다.

제 문제는 ASP를 사용하지 않는 것을 제외하면 이 문제와 비슷합니다.NET ASP.AJAX에서 JSON 인코딩 매개 변수를 자동으로 디코딩하는 NET MVC

그래서 만약 내가 URL을 가져간다면,example.com/#question=!%40%23%24%25^%26*(

반면 "!%40%23%24%25^%26*"는 인코딩을 사용하여 인코딩되었습니다.URI 구성 요소, IE에서 해시에 액세스하면 "!%40%23%24%25^%26*()"로 유지되지만, 파이어폭스에서 해시에 액세스하면 자동으로 "!"로 디코딩됩니다.@#$%^&*("

이 문제는 스크립트에서 디코딩을 사용하고 있다는 것입니다.인코딩된 값을 디코딩하는 URI 구성 요소. 문자열이 실제로 인코딩된 경우 문제가 없습니다.파이어폭스에서 이미 디코딩되어 있기 때문에 잘못된 형식의 URI 시퀀스 오류가 발생하며 IE에서는 전혀 오류가 발생하지 않습니다.

이걸 어떻게 고칠 수 있을까요?

검색한 결과 브라우저 간 문제이며, 사용하는 것이 더 좋습니다.location.href.split("#")[1]대신에window.location.hash

이것이 실제로 사용하고자 하는 것입니다.

decodeURI(window.location.hash.substr(1))

실제로 window.location.href.split("#!")[1]은(는) FF에 의해 자동으로 디코딩되지 않습니다(최소한 오늘).

이것은 정말 오래된 질문이지만, 근본적인 문제는 여전히 해결되지 않았습니다.파이어폭스는 다른 브라우저가 인코딩하지 않는 것을 인코딩합니다.

좌절감 때문에, 저는 완전히 다른 접근법을 만들어야 했고, 실제로 알고리즘을 문자열이 인코딩되었는지 여부와 독립적으로 만들어야 했습니다.

저는 이 솔루션이 필요한 사람들을 찾기를 바랍니다.

function encodeOnce(text) {
  var doubleEncoded = encodeURIComponent(text);
  // only dive into it if there are any encoded strings...
  if (doubleEncoded.indexOf('%') != -1) {
    // reverse replace all % signs
    doubleEncoded = doubleEncoded.replace(/%25/g, '%');
    // if this is not equal to the original string, ...
    if (doubleEncoded != text) {
      // ... that means there was something to encode
      text = doubleEncoded;
    }
  }
  return text;
}

그러면 다음을 수행할 수 있습니다.

solution = encodeOnce(window.location.hash.slice(1));

당신은 어떻게 생각하나요?

위의 답변은 URL에 둘 이상의 #이 포함된 경우를 제외하고 작동합니다.이는 다음과 같은 모든 경우를 처리해야 합니다.

var hash = "";
var indexOfHash = location.href.indexOf("#");
if (indexOfHash > -1) {
    hash = location.href.substring(indexOfHash);
}

또한 파이어폭스에서 이것이 곧 고쳐져야 할 것 같습니다.야상을 즐기세요.

https://bugzilla.mozilla.org/show_bug.cgi?id=378962

저는 이런 문제가 있었습니다.이 솔루션으로 해결했습니다.

var currentLocation = document.location.hash;
var decodedLocation = decodeURI(currentLocation);

언급URL : https://stackoverflow.com/questions/4835784/firefox-automatically-decoding-encoded-parameter-in-url-does-not-happen-in-ie

반응형