2012-05-01 31 views
6

Estoy tratando de obtener imágenes de un servidor remoto usando file_get_contents. Una URL a una imagen puede contener espacios y/o caracteres especiales como ý, á, í, etc. y cuando lo hace, la operación falla con un código HTTP 400 - Solicitud incorrecta. Si trato de codificar la URL (o segmentos de esa URL), usando urlencode o rawurlencode, obtengo un 404.file_get_contents - caracteres especiales en URL

Cuando la URL de la imagen no contiene espacios ni caracteres especiales, se descarga sin problemas.

Tengo la corazonada de que esto tiene algo que ver con la codificación, pero no puedo entenderlo. ¿Hay una opción de codificación que me falta? ¿Hay un encabezado que se debe establecer para la solicitud?

+2

http://stackoverflow.com/questions/2236668/file-get-contents-breaks-up-utf-8-characters –

+1

alickus: Eso no es en realidad un duplicado, la pregunta que enlazó es sobre UTF-8 en el contenido de la respuesta, no en la URL. – Kaivosukeltaja

+1

Abre esa imagen en tu navegador. Vea cómo el navegador codifica la URL. Luego vea la salida de 'echo urlencode ($ url);' y encuentre las diferencias – galymzhan

Respuesta

1

El problema con file_get_contents es la codificación UTF-8 (no implementado en PHP) Si desea descargar el archivo con esta función, tiene que hacer algo así en su URL:

$url_utf8 = rawurlencode(utf8_encode($url));

Y después:

$content = file_get_contents($url_utf8);

+1

Esto puede llevar a resultados imprevistos a menos que el archivo PHP se guarde como 'ISO-8859-1'. –