>  Q&A  >  본문

URL 생성자가 쿼리 문자열의 괄호를 인코딩하지 않는 이유는 무엇입니까?

<p>JavaScript에서 <code>URL</code> 생성자는 검색어 문자열에 나타날 때 대괄호와 괄호를 인코딩하지 않습니다. 반면 <code>encodeURI</code> 또는 <code>encodeURIComponent</ code>는 항상 인코딩합니다. 쿼리 매개변수에 특수 문자를 포함할 때 대부분의 소스에서 <code>encodeURI</code>/<code>encodeURIComponent</code>를 사용하여 인코딩한다고 하기 때문에 혼란스럽습니다. <code>URL</code> 개체에 대해서도 유사한 동작이 예상되었습니다. </p> <p>URL 개체의 쿼리 매개변수가 어떻게 인코딩될지 모르기 때문에 단위 테스트를 작성하는 데 문제가 발생합니다. 이를 명시하는 사양이 있습니까? 아니면 <code>URL</code> 생성자를 사용하기 전에 항상 매개변수를 인코딩해야 합니까? 도와주셔서 감사합니다. </p> <시간 /> <p>검색어 문자열에서 대괄호를 인코딩하지 않은 URL 개체를 보여주는 예</p> <pre class="brush:js;toolbar:false;">const href = (새 URL('https://foobar.com?myQuery={"@asdf/asdf":"1234"}' )).href; // ^ https://foobar.com/?myQuery={%22@asdf/asdf%22:%221234%22} </pre> <p><code>encodeURI</code>를 사용하는 경우 유일한 차이점은 대괄호가 인코딩된다는 점입니다</p> <pre class="brush:js;toolbar:false;">const href = encodeURI('https://foobar.com?myQuery={"@asdf/asdf":"1234"}'); // ^ https://foobar.com?myQuery=%7B%22@asdf/asdf%22:%221234%22%7D </pre> <시간 /> <p>참고: 검색어 매개변수에 괄호가 포함되어 있지 않으면 URL 개체가 이를 인코딩합니다. </p> <pre class="brush:js;toolbar:false;">const href = (새 URL('https://foobar.com/}}}?myQuery={"@asdf/asdf":" 1234"}')).href; // ^ https://foobar.com/%7D%7D%7D?myQuery={%22@asdf/asdf%22:%221234%22}

P粉287254588P粉287254588412일 전420

모든 응답(1)나는 대답할 것이다

  • P粉785957729

    P粉7859577292023-09-04 10:55:36

    다양한 인코딩이 가능하며 모두 동일한 URL로 해석되어야 하므로 기술적으로 잘못된 것은 없습니다. 또 다른 예는 퍼센트 인코딩이 대문자나 소문자(%aa%AA),域名不区分大小写,空格可以被编码为+%20(일부 부분에서는)를 사용할 수 있다는 것입니다.

    URL 인코딩의 특정 구현을 단위 테스트하려는 경우 문자열 일치를 수행할 수 있지만 두 URL이 인코딩 방법에 관계없이 동일한지 알고 싶다면 먼저 "정규화"라는 단계를 수행해야 합니다. , 비교한 다음.

    회신하다
    0
  • 취소회신하다