当我使用curl库并尝试从url获取图像时,我得到400错误的请求错误。 我发现问题在于编码网址。 但在我的情况下它不起作用,因为我的网址 - 它是服务器端图像的路径 - 如
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返回http_code = 0
更新
$url = str_replace(' ', '+', $url);
不起作用,服务器返回404错误。
答案 0 :(得分:17)
这可能有用吗?
$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);
答案 1 :(得分:1)
您需要使用rawurlencode()功能:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, rawurlencode($url));
echo $ret = curl_exec($ch);
rawurlencode()必须始终是首选。 urlencode()仅用于遗留用途。有关详细信息,请查看this SO answer。
答案 2 :(得分:0)
您不能对整个字符串进行urlencode,因为这会对斜杠和其他需要保持未编码的字符串进行编码。如果空格是你唯一的问题,那就是:
str_replace(' ', '+', $url);