2011-03-26 12 views
9

tengo una URL como estacómo codificar URL usando PHP como los navegadores hacer

http://www.example.com/Data/image/office-dôn-sì-à.jpg 

quiero copiar el archivo a mi servidor usando copia función en php. Así que lo primero es para codificar a este (creo navegadores hacen lo mismo)

http://www.example.com/Data/image/office-d%C3%B4n-s%C3%AC-%C3%A0.jpg 

Pero si la función uso urlencode, URL completa será codificado a

http%3A%2F%2Fwww.example.com%2FData%2Fimage%2Foffice-d%C3%B4n-s%C3%AC-%C3%A0.jpg 

que es ya no es una URL y no es lo que quiero.

¿Algún ayuda?

+0

¿Desea ** descargar ** un archivo de otro servidor al suyo usando el contenedor HTTP? http://php.net/manual/en/wrappers.php - ¿Cómo se obtiene la URL? – vbence

+0

El ULR codificado se copia de la barra de direcciones en FF. Cambié su nombre de host debido a la privacidad. Quiero copiar el archivo usando: 'copy ('http://www.example.com/Data/image/office-d%C3%B4n-s%C3%AC-%C3%A0.jpg', ' destination.jpg '); ' – user342960

+0

Si está seguro de que solo la última pieza (el nombre de archivo) contendrá caracteres especiales, puede usar la solución de Russel. – vbence

Respuesta

9

Por lo tanto, las otras respuestas aquí han ignorado en gran medida su publicación, parece. Esperemos que no haya hecho lo mismo.

Me parece que solo quieres codificar el nombre base? Si eso es cierto, esta función ad-hoc debería hacer el truco:

function encode_basename($url) { 
    $url = explode('/', $url); 
    $base = array_pop($url); 

    return implode('/', $url) . '/' . urlencode($base); 
} 
//returns: http://www.example.com/Data/image/office-d%25C3%25B4n-s%25C3%25AC-%25C3%25A0.jpg 
+0

No funciona perfectamente ... –

+0

function encode_basename ($ url) { $ url = explode ('/', $ url); $ base = array_pop ($ url); return implode ('/', $ url). '/'. rawurlencode ($ base); } –

+0

use rawurlencode() –

Cuestiones relacionadas