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}