Al configurar el nombre de ruta de una URL , ¿cuándo debe codificar el valor que está configurando?
Cuando digo URL me refiero a esta API: https://developer.mozilla.org/en-US/docs/Web/API/URL
Cuando digo "establecer el nombre de la ruta" quiero decir hacer esto:
url.pathname = 'some/path/to/a/resource.html';Según la documentación de MDN, creo que la respuesta es "no debería ser necesario", ya que hay un ejemplo que cubre este caso:
Las URL se codifican de acuerdo con las reglas que se encuentran en RFC 3986. Por ejemplo:
url.pathname = 'démonstration.html'; console.log(url.href); // "http://www.example.com/d%C3%A9monstration.html"
Sin embargo, me encontré con un caso en el que parece que necesito codificar el valor en el que estoy configurando el nombre de la pathname :
url.pathname = 'atest/New Folder1234/!@#$%^&*().html'; console.log(url.href); Espero que esto genere: http://example.com/atest/New%20Folder1234/!%40%23%24%25%5E%26*().html
Pero en su lugar estoy obteniendo: https://example.com/atest/New%20Folder1234/!@%23$%^&*().html
Parece obtener lo que espero que tengo que hacer:
url.pathname = 'atest/New Folder1234/!@#$%^&*()'.split('/').map(encodeURIComponent).join('/') ¿Que esta pasando aqui? No puedo encontrar nada en la página de documentos de MDN para URL o nombre de pathname que explique esto. Eché un vistazo rápido a través de RFC 3986, pero eso parece describir la sintaxis de URI. He realizado algunos experimentos en un esfuerzo por encontrar algún tipo de patrón para este problema, pero nada me llama la atención.
Consulte la especificación para el estado de la ruta , en particular ...
Codificación porcentual UTF-8 c mediante el conjunto de codificación porcentual de la ruta y anexar el resultado al búfer.
con el conjunto de codificación porcentual de la ruta definido como...
el conjunto de codificación de porcentaje de consulta y U+003F (?), U+0060 (`), U+007B ({) y U+007D (}).
y el conjunto de codificación porcentual de la consulta es...
el conjunto de codificación de porcentaje de control C0 y U+0020 ESPACIO, U+0022 ("), U+0023 (#), U+003C (<) y U+003E (>).
puedes seguir sumergiéndote en la madriguera del conejo si quieres, pero creo que es suficiente
Tenga en cuenta que ninguno de estos conjuntos incluye @$%^& que son los caracteres que señaló.
Compárelos con la especificación deEncode , que es mucho más exhaustiva.