file_get_contents - URL中的特殊字符

7
我正在尝试使用file_get_contents从远程服务器获取图像。图像的URL可能包含空格和/或特殊字符,例如Ý、á、í等,当包含这些字符时,操作失败并返回HTTP代码400 -错误请求。如果我尝试使用urlencoderawurlencode对URL(或该URL的段)进行编码,则会返回404。
当图像URL不包含空格或特殊字符时,可以顺利下载。
我有一个预感,这与编码有关,但我无法解决它。是否有我没有注意到的编码选项?是否必须设置请求的标头?

2
https://dev59.com/lHE95IYBdhLWcg3wm_It - Aurimas Ličkus
2
alickus:那实际上不是重复的问题,你链接的那个问题是关于响应内容中的UTF-8,而不是URL。 - Kaivosukeltaja
1
在浏览器中打开该图像。看看浏览器如何编码URL。然后查看echo urlencode($url);的输出并找出差异。 - galymzhan
如何清理文件名中的特殊字符,然后对用户输入执行相同操作? - Jasper
1个回答

3

使用 file_get_contents 函数的问题在于 UTF-8 编码(PHP 中尚未实现)。 如果您想使用此函数下载文件,则需要在 URL 上执行以下操作:

$url_utf8 = rawurlencode(utf8_encode($url));

之后执行以下操作:

$content = file_get_contents($url_utf8);


1
这可能导致不可预测的结果,除非将PHP文件保存为ISO-8859-1 - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接