Jam*_*mes 7 php file urlencode file-get-contents
我们有一个像http://site.s3.amazonaws.com/images/some image @name.jpg里面的网址$string
我正在尝试做什么(是的,网址周围有一个空格):
$string = urlencode(trim($string));
$string_data = file_get_contents($string);
Run Code Online (Sandbox Code Playgroud)
我得到了什么(@也被替换):
file_get_contents(http%3A%2F%2Fsite.s3.amazonaws.com%2Fimages%2Fsome+image+@name.jpg)[function.file-get-contents]: failed to open stream: No such file or directory
如果您复制/粘贴http://site.s3.amazonaws.com/images/some image @name.jpg到浏览器地址栏中,图像将会打开.
有什么不好以及如何解决这个问题?
Vic*_*tor 10
使用urlencode()整个URL的函数,将生成无效的URL.保留URL也不正确,因为与浏览器相比,该file_get_contents()功能不执行URL规范化.在您的示例中,您需要将空格替换为%20:
$string = str_replace(' ', '%20', $string);
Run Code Online (Sandbox Code Playgroud)
您指定的 URL 无效。file_get_contents需要一个有效的 http URI(更准确地说,是底层的 http 包装器)。由于您的无效 URI 不是有效的 URI,因此file_get_contents会失败。
您可以通过将无效 URI 转换为有效 URI 来解决此问题。RFC3986中提供了如何编写有效 URI 的信息。您需要注意所有特殊字符的表示是否正确。例如,空格到加号,并且广告 at 符号必须进行 URL 编码。还需要删除开头和结尾多余的空格。
\n完成后,网络服务器会告诉您访问被禁止。然后,您可能需要通过 HTTP 文件包装器的 HTTP 上下文选项添加额外的请求标头来解决该问题。您可以在 PHP 手册中找到该信息:http:// -- https:// \xe2\x80\x94 访问 HTTP(s) URL
\n| 归档时间: |
|
| 查看次数: |
15191 次 |
| 最近记录: |