2010-05-14 13 views
9

¿Hay alguna manera de urlencode excepto los separadores de directorio/en la ruta?urlencode except/

como

urlencode('/this/is/my/file right here.jpg'); 

Respuesta

27

Puede utilizar

Así todos juntos en una sola línea:

$path = implode('/', array_map('rawurlencode', explode('/', $path))); 
+0

Esta sería la forma más correcta conceptualmente de hacerlo, aunque en la práctica el 'str_replace' sería más simple. De cualquier forma +1 para 'rawurlencode'; siempre es lo correcto, mientras que 'urlencode' es a veces lo incorrecto. – bobince

14

Reemplazar de nuevo:

str_replace('%2F', '/', urlencode('/this/is/my/file right here.jpg')); 

Tenga en cuenta que si se va a pasar el resultado de una cadena de consulta, que no debe hacer la sustitución de arriba - use solamente urlencode . Si lo está utilizando en la porción de ruta, debe usar rawurlencode en su lugar.

+0

Éste suena bien también. Debe ser mucho más rápido que la respuesta seleccionada, supongo. –

+0

Esto cubre el 99% de los casos. El 1% son las rutas en las que el 2% F no está destinado a convertirse, sino una parte real de la cadena de ruta. – Tyblitz

+0

@Tyblitz 2% F se codificará a 2% 25F si fuera parte de la cadena de ruta. – Phil

2

Esto debería resolver su problema.

str_replace("%2F","/",urlencode('/this/is/my/file right here.jpg')); 
2
$array = explode('/', '/this/is/my/file right here.jpg'); 
foreach ($array as &$value) { 
     $value = urlencode($value); 
} 
print implode('/', $array); 
Cuestiones relacionadas