2014-02-18 113 views
0

一个非常简单的问题,在这里可能已经解决了很多时间,但我没有得到我想要的。如何将此网址转换为%20?

我有一个形象的网址是这样的:

$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg'; 

,并希望输出以这种形式

http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg 

是ofcourse你会告诉我,我可以使用进行urlencode或rawurlencode。相信我,我已经尝试过,仍然没有运气。

用urlencode我得到这样

http%3A%2F%2Fperfumepalace.arctechsolution.com%2Fimage%2Fcache%2Fdata%2Fanother%2FFor+Her%2FBelieve+100ml+EDP-150x150.jpg 

而且随着rawurlencode我收到这样的输出:

http%3A%2F%2Fperfumepalace.arctechsolution.com%2Fimage%2Fcache%2Fdata%2Fanother%2FFor%20Her%2FBelieve%20100ml%20EDP-150x150.jpg 

随着str_replace我能得到什么我想是这样的:

str_replace('+', '%20', $image); 

将导致:http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg

但我想让他们使用urlencode或rawurlencode。但是这些函数甚至可以编码斜线/部分。

有没有什么办法可以只对url中的空格进行url编码?

编辑:是的,我可以使用basename()或pathinfo来只编码部分网址。但是,目录名称也可能包含空格字符,因此仅转换文件名在这里也是不可能的。

实际上我想知道我们是否可以在不影响fullurl的'/'的情况下使用urlencode或rawurlencode。我不希望正则表达式的建议更高。

注意:并发症部分是URL路径中'她的'目录部分,目录的级别也不固定。

+0

@Rikesh我希望你能在回答之前阅读整篇文章。 –

+0

“str_replace”有什么问题?为什么你不想使用它? – Bilal

+0

但是,为什么只需要空格进行编码? –

回答

3

你需要的是rawurlencode(),但只编码你的url的必要部分。

例子:

$image = sprintf(
    'http://perfumepalace.arctechsolution.com/image/cache/data/another/%s/%s', 
    rawurlencode('For Her'), 
    rawurlencode('Believe 100ml EDP-150x150.jpg') 
); 

但是,如果你仍然想应用到整个URL字符串,你可以做象下面这样:编码字符串时要

function my_url_encode($url) { 
    $info = parse_url($url); 
    return sprintf('%s://%s/%s', 
        $info['scheme'], 
        $info['host'], 
        implode('/', array_map('rawurlencode', explode('/', $info['path'])))); 
} 
+0

我没有提到rawurlencode的问题。在回复之前请阅读完整的文章。你提到了 –

+0

。 '但我想让他们使用urlencode或rawurlencode'。我认为这个答案应该可以解决你的问题。你只需要编码必要的部分。 'rawurlencode'将不会为你处理这个部分。 – anurupr

+0

@Yegya查看示例。 – xdazz

1

UrlEncode只应该用于用于查询网址。

所以我在这里的建议是你要保留str_replace('+', '%20', $image);代码,因为你有完整的URL而不仅仅是查询部分。

另一种选择是解析URL,解压路径,对其进行编码和重建的URL,这里是一个例子:

$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg' 

$path = parse_url($image, PHP_URL_PATH);//extract the path 
$epath = rawurlencode($path);//encode it 
$enc_image = 'http://perfumepalace.arctechsolution.com/'.$epath;//build the new url 
+0

是的,我们可以使用它,但我不想str_replace。它是我客户的要求。 –

+0

@Yegya我用一个不同的解决方案更新了我的答案,没有测试过,但应该可以工作 – fmodos

+1

我认为你的修改后的解决方案将在路径中包含'/'字符。没有bueno。 –

1

试试这个:

$image = 'http://perfumepalace.arctechsolution.com/image/cache/data/another/For Her/Believe 100ml EDP-150x150.jpg'; 
$parts = parse_url($image); 
$image_path = explode('/',$parts['path']); 
foreach($image_path as $key => $image_path_part){ 
$image_path[$key] = rawurlencode($image_path_part); 
} 
echo $parts['scheme']."://".$parts['host'].implode('/',$image_path); 

输出http://perfumepalace.arctechsolution.com/image/cache/data/another/For%20Her/Believe%20100ml%20EDP-150x150.jpg

祝您有美好的一天!

+0

简单又好看的方法。 +1。感谢名单。 @ xdazz的解决方案虽然不错。 –

+0

我现在检查了他的解决方案。除了'image'文件夹之外还有一个额外的'/',这很好。所以请在使用前删除它。 –