Когда я использую библиотеку curl и пытаюсь получить изображение с url, я получаю 400 ошибок с ошибкой. Я основал эту проблему с кодировкой url. Но в моем случае это не работает, потому что мой url – это путь к изображению на стороне сервера – например,
http://example.com/images/products/product 1.jpg
Я понимаю, что пользовательские пространства в файлах имен – это плохая практика, но это не мой сервер, и я не создал эти файлы.
$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, urlencode($url)); echo $ret = curl_exec($ch);
Когда я использую функцию urlencode – curl return http_code = 0
обновленный
$url = str_replace(' ', '+', $url);
не работает, ошибка возврата сервера 404.
Может ли это работать?
$url = 'http://host/a b.img'; $url = str_replace(" ", '%20', $url); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); echo $ret = curl_exec($ch);
Вам нужно использовать функцию rawurlencode () :
$ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, rawurlencode($url)); echo $ret = curl_exec($ch);
Необязательно использовать rawurlencode () . urlencode () поддерживается только для использования устаревшим способом. Для более подробной информации смотрите этот ответ .
Вы не можете urlencode всю строку, потому что это будет кодировать косые черты и другие, которые вам нужно оставить незакодированными. Если пробелы являются вашей единственной проблемой, это будет делать:
str_replace(' ', '+', $url);