Urlencode и file_get_contents

У нас есть URL, какhttp://site.s3.amazonaws.com/images/some image @name.jpg внутри$string

Что я пытаюсь сделать (да, вокруг URL есть пробел):

$string = urlencode(trim($string));
$string_data = file_get_contents($string);

Что я получаю (@ также заменяется):

file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%[email protected])[function.file-get-contents]: failed to open stream: No such file or directory

Если вы копируете / вставляетеhttp://site.s3.amazonaws.com/images/some image @name.jpg в адресную строку браузера, изображение откроется.

Что плохого и как это исправить?

 Pratik Bothra01 окт. 2013 г., 17:08
Это отличный ответstackoverflow.com/questions/8260564/…
 hakre17 июн. 2012 г., 14:43
Таким образом, вы превращаете URL в недействительный URL, а затем вы удивляетесь, что он не работает? Что это за вопрос? Пожалуйста, дополните.
 Funk Forty Niner17 июн. 2012 г., 16:48
Я не могу обернуть голову вокруг этого. Можете ли вы предоставить мне / нам свой полный код?

Ответы на вопрос(2)

Используя функциюurlencode() для всего URL, будет генерировать недействительный URL. Оставлять URL-адрес как есть также нельзя, потому что в отличие от браузеров,file_get_contents() функция не выполняетНормализация URL, В вашем примере вам нужно заменить пробелы на%20:

$string = str_replace(' ', '%20', $string);
 09 апр. 2013 г., 16:49
работает, но это очень грязный обходной путь
 16 апр. 2014 г., 17:22
Как насчетRAWURLENCODE?
 21 июн. 2013 г., 11:07
наконец-то что-то работает, спасибо
 01 окт. 2013 г., 17:09
Это отличный ответ -:stackoverflow.com/questions/8260564/…
Решение Вопроса

Указанный вами URL недействителен.file_get_contents ожидает действительный http URI (точнее, базовая оболочка http делает). Поскольку ваш недействительный URI не является допустимым URI,file_get_contents выходит из строя.

Это можно исправить, превратив недопустимый URI в действительный URI. Информация о том, как написать действительный URI, доступна вRFC3986, Вы должны позаботиться о том, чтобы все специальные символы были представлены правильно. например пробелы в знаках плюса, а реклама в знаке должна быть закодирована URL. Также необходимо удалить лишние пробелы в начале и конце.

Когда закончите, веб-сервер скажет вам, что доступ запрещен. Затем вам может понадобиться добавить дополнительные заголовки запроса через параметры контекста HTTP для оболочки файла HTTP, чтобы решить эту проблему. Вы найдете информацию в руководстве по PHP:http: // - https: // & # x2014; Доступ к HTTP (s) URL

 17 июн. 2012 г., 15:01
Рабочий пример:codepad.viper-7.com/jkJjgW

Ваш ответ на вопрос