2012-05-01 22 views
6

Próbuję uzyskać obrazy ze zdalnego serwera przy użyciu file_get_contents. Adres URL obrazu może zawierać spacje i/lub znaki specjalne, takie jak ý, á, í, itp., A kiedy to nastąpi, operacja kończy się niepowodzeniem z kodem HTTP 400 - Złe żądanie. Jeśli spróbuję zakodować adres URL (lub segmenty tego adresu URL), korzystając z numeru urlencode lub rawurlencode, otrzymam numer 404.file_get_contents - znaki specjalne w adresie URL

Gdy adres URL obrazu nie zawiera spacji ani znaków specjalnych, jest pobierany bez problemów.

Mam przeczucie, że ma to coś wspólnego z kodowaniem, ale po prostu nie mogę tego rozgryźć. Czy brakuje opcji kodowania? Czy istnieje nagłówek, który należy ustawić dla żądania?

+2

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

+1

alickus: to nie jest właściwie duplikat, pytanie, które łączysz, dotyczy formatu UTF-8 w treści odpowiedzi, a nie adresu URL. – Kaivosukeltaja

+1

Otwórz to zdjęcie w przeglądarce. Zobacz, jak przeglądarka koduje URL. Następnie zobacz dane wyjściowe 'echo urlencode ($ url);' i znajdź różnice – galymzhan

Odpowiedz

1

Problem z file_get_contents jest kodowanie UTF-8 (jeszcze nie zaimplementowane w PHP) Jeśli chcesz pobrać plik z tej funkcji, trzeba zrobić coś takiego na swoim adresem URL:

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

A po:

$content = file_get_contents($url_utf8);

+1

Może to prowadzić do nieprzewidzianych wyników, chyba że plik PHP zostanie zapisany jako "ISO-8859-1". –