一个非常简单的问题,可能已经在这里解决了很多时间,但我没有得到我想要的东西。
我有一个像这样的图片网址:
$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'目录部分,目录级别也没有修复。
答案 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
度过美好的一天!!