2010-02-08 18 views
5

Nos hemos topado con un argumento extraño en el que trabajo, y puedo estar equivocado al respecto, por eso es por lo que estoy preguntando.Codificación de URL con guiones bajos en un nombre de directorio?

Nuestro software entrega un directorio a un servidor Apache que reemplaza un guión bajo con un% 5F en el nombre del directorio.

Por ejemplo, si el nombre del directorio estaba listado como una cadena en nuestro software, sería: "andy_test", pero luego cuando el software muestre el directorio al servidor Apache, se convertiría en "andy% 5Ftest". Lamentablemente, cuando accedes a la url en el servidor, termina convirtiéndose en "andy% 255Ftest".

De alguna manera esto parece mal a mí, una vez más, la progresión es:

  1. andy_test < - (como una cadena en el software)
  2. Andy% 5Ftest < - (que aparece como un directorio en el servidor)
  3. Andy% 255Ftest < -. (debe ser utilizado cuando se llama al mismo directorio como una dirección URL en el servidor desde un navegador web)

estoy assum que "% 5" codifica el subrayado y que "% 25" codifica "%".

Ahora me parece que la forma en que el nombre del directorio debe aparecer en el servidor sería simplemente andy_test y si estuviera usando un URI codificado, entonces tal vez terminaría con el "andy% 5Ftest" para accede al directorio en el servidor apache.

Me preguntó a los chicos en el backend de ello, y me dijeron que eran simplemente: "codificar nada que no fuera una letra o un número

así que supongo que estoy un poco confundido en esto.. ¿me puede decir quién tiene la razón, y me dirige a alguna información sobre por qué

Respuesta

9

No debe codificar los nombres de los directorios a medida que los crea (como sugirió). La codificación solo debe ocurrir en la última etapa donde se entrega al navegador. Es por eso que terminas con la codificación 'doble':% 25 es% y 5F es el resto de la primera codificación de guión bajo.

Por cierto, no es necesario codificar el guión bajo de todos modos (creo que de acuerdo con rfc1738).

2.2.Carácter URL problemas de codificación

...

Por lo tanto, ser alfanuméricos, los caracteres especiales "$ -_. +! * '()", Y caracteres reservados utilizados para sus fines reservadas se pueden usar no codificado dentro de una URL.

+1

¡Gracias por la referencia de RFC también! – leeand00

3

Hay doble codificación sucediendo en lo que está mostrando dos pasos deben ser lo suficientemente:?.

andy_test es tanto la cadena en el software y el nombre real del directorio o script en el sistema de archivos (el recurso al que accede el servidor web)

andy%5Ftest es andy_test URL codificada. Esta cadena debe usar el navegador (no es realmente necesaria en el caso de subrayado, pero puede ser en otros casos).

andy%255ftest es solo andy_test URL codificada dos veces, lo que no tiene sentido, no debería ser necesario. Solo decide DONDE harás la codificación. Si lo hace tanto en el nivel de código como en el servidor web, esto es lo que puede suceder y el resultado son enlaces rotos a menos que esté decodificando dos veces nuevamente, lo cual no es realmente necesario ni sensato.

+0

No escribí el backend para el software, solo estoy tratando de convencer a los chicos del backend de que algo se ha hecho mal. – leeand00

+0

@ leeand00: Debería ser obvio que tener algo hecho dos veces es incorrecto. El objetivo debe ser determinar dónde es el mejor lugar para hacer la codificación y hacerlo solo allí (no dos veces). –

Cuestiones relacionadas