我们有一个像URL http://site.s3.amazonaws.com/images/some image @name.jpg
内$string
我想要做的(是的,有各地的URL空格):
$string = urlencode(trim($string));
$string_data = file_get_contents($string);
我能得到什么(@也替换):
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
到浏览器地址栏中,图像将打开。
什么是坏的,如何解决呢?
您指定的URL是无效的。 file_get_contents
期望有效的HTTP URI(更精确地,底层HTTP包装一样)。 由于您的无效URI是不是一个有效的URI, file_get_contents
失败。
您可以把您的无效URI为有效的URI解决这个问题。 信息如何写一个有效的URI是可用RFC3986 。 你需要采取的所有特殊字符都正确地表示关心。 例如,空格加标志,并在标志的商业广告已经被URL编码。 此外,在开头和结尾多余的空白需要被删除。
完成后,Web服务器会告诉你访问被禁止的。 然后,您可能需要通过HTTP上下文选项添加额外的请求头的HTTP文件包来解决。 你会发现在PHP手册中的信息: HTTP:// - https://开头-访问HTTP(S)的网址
使用函数urlencode()
对整个URL,将生成无效的URL。 离开,因为它也是URL是不正确的,因为在对比的是浏览器, file_get_contents()
功能不执行URL规范化 。 在你的榜样,你需要更换空格%20
:
$string = str_replace(' ', '%20', $string);