¿Hay alguna manera de urlencode excepto los separadores de directorio/en la ruta?urlencode except/
como
urlencode('/this/is/my/file right here.jpg');
¿Hay alguna manera de urlencode excepto los separadores de directorio/en la ruta?urlencode except/
como
urlencode('/this/is/my/file right here.jpg');
Puede utilizar
explode
dividir su camino hacia los segmentos de trazado,array_map
para aplicar rawurlencode
en cada artículo (no utilice urlencode
, eso es sólo para application/x-www-form-urlencoded encoded ¡argumentos de consulta!) yimplode
para volver a unir los segmentos.Así todos juntos en una sola línea:
$path = implode('/', array_map('rawurlencode', explode('/', $path)));
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.
Éste suena bien también. Debe ser mucho más rápido que la respuesta seleccionada, supongo. –
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
@Tyblitz 2% F se codificará a 2% 25F si fuera parte de la cadena de ruta. – Phil
Esto debería resolver su problema.
str_replace("%2F","/",urlencode('/this/is/my/file right here.jpg'));
$array = explode('/', '/this/is/my/file right here.jpg');
foreach ($array as &$value) {
$value = urlencode($value);
}
print implode('/', $array);
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