如何将此网址转换为%20?

时间:2014-02-18 07:05:16

标签: php opencart

一个非常简单的问题,可能已经在这里解决了很多时间,但我没有得到我想要的东西。

我有一个像这样的图片网址:

$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

是的,你会告诉我我可以使用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来仅编码部分网址。但目录名称也可能包含空格字符,因此此处也不可能只转换文件名。

实际上我想知道我们是否可以在完整URL中使用urlencode或rawurlencode而不影响fullurl的'/'。我不希望正则表达式的建议更进一步。

注意:复杂的部分是url路径中的'For Her'目录部分,目录级别也没有修复。

3 个答案:

答案 0 :(得分:3)

您需要的是 rawurlencode() ,但只会对您网址的必要部分进行编码。

示例:

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

但是如果你仍想申请整个网址字符串,你可以这样做:

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']))));
}

答案 1 :(得分:1)

仅当编码要在网址查询中使用的字符串时,才应使用

UrlEncode

所以我的建议是让你保持str_replace('+', '%20', $image);代码,因为你有完整的网址而不仅仅是查询部分。

另一个选项是解析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

答案 2 :(得分: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

度过美好的一天!!