Intereting Posts
Есть ли способ скомпилировать шаблон ножа из строки? Как декодировать eval (gzinflate (base64_decode ( круговое изображение с изображением Настройка параметров CURL для клиента fabpot / goutte Вход / выход одного веб-сайта влияет на другой веб-сайт на том же сервере Каковы профи для использования URL-адресов без расширения? Гузл ~ 6.0 multipart и form_params Создание выпадающего списка часовых поясов с помощью PHP Как я могу абстрагировать подготовленные инструкции mysqli в PHP? Путь загрузки в Codeigniter возвращает «путь загрузки, кажется, недействителен» Как удалить элемент из дерева XML, где атрибут – это определенная строка в Simple XML PHP Можно ли загружать изображение на сервер с помощью диалогового окна «Модальное окно» Bootstrap, jQuery, AJAX и PHP? Если да, то как? Если нет, в чем причина? Предупреждение: mysql_real_escape_string () ожидает, что параметр 1 будет строкой Удалить трейлинг-косую строку из PHP mod_rewrite .htaccess вызывает 500 ошибок сервера, если URl не существует

php – file_get_contents – Загрузка файлов с пробелами в имени файла не работает

Я пытаюсь загрузить файлы, используя функцию file_get_contents() . Однако, если местоположение файла – http://www.example.com/some name.jpg , функция не может загрузить это.

Но если URL-адрес указан как http://www.example.com/some%20name.jpg , тот же загружается.

Я попробовал rawurlencode() но это скрывает все символы в URL-адресе, и загрузка снова завершается.

Может кто-нибудь предложить решение для этого?

Я думаю, это сработает для вас:

 function file_url($url){ $parts = parse_url($url); $path_parts = array_map('rawurldecode', explode('/', $parts['path'])); return $parts['scheme'] . '://' . $parts['host'] . implode('/', array_map('rawurlencode', $path_parts)) ; } echo file_url("http://example.com/foo/bar bof/some file.jpg") . "\n"; echo file_url("http://example.com/foo/bar+bof/some+file.jpg") . "\n"; echo file_url("http://example.com/foo/bar%20bof/some%20file.jpg") . "\n"; 

Вывод

 http://example.com/foo/bar%20bof/some%20file.jpg http://example.com/foo/bar%2Bbof/some%2Bfile.jpg http://example.com/foo/bar%20bof/some%20file.jpg 

Заметка:

Я бы, вероятно, использовал urldecode и urlencode для этого, так как выход был бы идентичен для каждого URL-адреса. rawurlencode сохранит + даже если %20 , вероятно, подходит для любого URL-адреса, который вы используете.

Как вы, вероятно, уже выяснили, urlencode () следует использовать только на каждой части URL-адреса, требующей экранирования.

Из документов для urlencode () просто примените его к имени файла изображения, что даст вам проблему и оставит остальную часть URL-адреса. Из вашего примера вы можете безопасно кодировать все, что следует за последним символом «/»

Возможно, это лучшее решение. Если по какой-либо причине вы используете относительный URL-адрес, например:

//www.example.com/path

До php 5.4.7 это не создало бы элемент массива [схема], который бы сбросил функцию maček. Этот метод может быть и быстрее.

$url = '//www.example.com/path';

 preg_match('/(https?:\/\/|\/\/)([^\/]+)(.*)/ism', $url, $result); $url = $result[1].$result[2].urlencode(urldecode($result[3])); 

Если предположить, что только имя файла имеет проблему, это лучший подход. только urlencode в последнем разделе, т.е. имя файла.

 private function update_url($url) { $parts = explode('/', $url); $new_file = urlencode(end($parts)); $parts[key($parts)] = $new_file; return implode("/", $parts); } 

Это должно работать

 $file = 'some file name'; urlencode($file); file_get_contents($file);