【问题标题】:PHP: fopen(UrlWithWhiteSpaces)PHP: fopen(UrlWithWhiteSpaces)
【发布时间】:2014-09-28 02:32:05
【问题描述】:

正如您在标题中看到的那样,我正在尝试 fopen() 带有空格的 Url。其他stackoverflow帖子真的没有帮助,可能是它们已经过时了吗?
我试过了:

  • urlencode
  • rawurlencode

以上都不起作用,http://test.com/two - words.jpg 这给了我:

  • 网址代码:http%3A%2F%2Ftest.com%2Ftwo+-+words.jpg
  • rawurlencode:http%3A%2F%2Ftest.com%2Ftwo%20-%20words.jpg

当我试图清楚地获取 http://test.com/two%20-%20words.jpg 时,这是您键入 http://test.com/two - words.jpg 并按回车时浏览器显示的内容。

我必须使用哪个函数来进行从 space%20all 的转换 我可能需要的其他可能的转换(我想不出更多了,但我很确定它们存在,可能在特殊符号上)?

【问题讨论】:

标签: php url fopen


【解决方案1】:

使用preg_replace

$newUrl = preg_replace('/ /', '%20', 'http://test.com/two - words.jpg');

echo $newUrl;

输出

http://test.com/two%20-%20words.jpg

或者str_replace

$newUrl = str_replace(' ', '%20', 'http://test.com/two - words.jpg');

但更一般地说,您需要编码的不仅仅是空间。我做了这个功能,如果你不想使用urlencoderawurlencode,这就是你要找的:

function encodeURI($URI)
{
    return str_replace(array('%', '^', '+', '{', '[', '}', ']', '"', '|', '\\', '<', '>', ' '),
        array('%25', '%5E', '%2B', '%7B', '%5B', '%7D', '%5D', '%22', '%7C', '%5C', '%3C', '%3E', '%20'), $URI);
}

示例

echo encodeURI('http://test.com/two - ["word<><s.jpg');

输出

http://test.com/two%20-%20%5B%22word%3C%3E%3Cs.jpg

【讨论】:

  • 你好!你确定那是我唯一需要的转换吗?我对此持怀疑态度,但是我会使用它,因为我没有更好的选择
  • 这就是你问的。
  • and all the other possible conversions i could need
  • 正则表达式而不是str_replace?为什么会有开销?
猜你喜欢
  • 1970-01-01
  • 2012-09-07
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2013-10-17
相关资源
最近更新 更多