Php curl,如何下载具有特殊字符的文件?

Php curl,如何下载具有特殊字符的文件?,php,curl,Php,Curl,我的下载功能: public static function download($a) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $a); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FAILONERROR, 1); curl_setopt($curl, CURLOPT_FOLLOWLO

我的下载功能:

public static function download($a)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $a);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FAILONERROR, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, 15);
    $a= curl_exec($curl);
    curl_close($curl);
    return $a;
}
鉴于这种联系:

http://example.com/x.txt
它工作得很好。但在特殊情况下:

http://example.com/fájl/név/with ékezetek.txt
然后它是一个“400-错误的请求。
curl\u errno
则是22。那怎么下载呢?urlencode不正常,因为它对主机名本身进行编码

编辑:那些网址是“外部”的,我没有影响力

试着做一个决定

base64_encode
以及

base64_decode
要获取原始数据,请尝试

base64_encode
以及

base64_decode

要获取原始数据,卷曲和文件内容与包含特殊字符(重音字母、引号等)的URL不兼容

解决方案:

$data = file_get_contents(urlEncode('http://www.test.com/file/file_planta_1ª.jpg'));

function urlEncode($url)
{
    $parts = parse_url($url);
    $parts['path'] = implode('/', array_map('urlencode', explode('/', $parts['path'])));
    return $parts['scheme'].'://'.$parts['host'].$parts['path'];
}

cURL和file_get_内容不适用于包含特殊字符(重音字母、引号等)的URL

解决方案:

$data = file_get_contents(urlEncode('http://www.test.com/file/file_planta_1ª.jpg'));

function urlEncode($url)
{
    $parts = parse_url($url);
    $parts['path'] = implode('/', array_map('urlencode', explode('/', $parts['path'])));
    return $parts['scheme'].'://'.$parts['host'].$parts['path'];
}

因此,如果您尝试仅对文件名进行URL编码,您是否尝试过类似的方式
urlencode(utf8_encode($url))
这个链接可能对您有帮助:我创建了一个文件并使用了如下命令:
curl_setopt($curl,CURLOPT_url,“localhost/saßen.html”)并且工作正常。您使用的是哪个版本的PHP和哪个服务器?您可以试用PHP7.X吗?我正在使用PHP7.3和ApacheSo进行测试,如果您尝试仅对文件名进行URL编码,您是否尝试过类似的方法
urlencode(utf8_encode($url))
这个链接可能对您有帮助:我创建了一个文件并使用了如下命令:
curl_setopt($curl,CURLOPT_url,“localhost/saßen.html”)并且工作正常。您使用的是哪个版本的PHP和哪个服务器?您可以试用PHP7.X吗?我正在用PHP7.3和ApacheURL进行测试。URL是从外部给出的,我对它没有影响。URL是从外部给出的,我对它没有影响