2014-02-18 2 views
0

Очень простая проблема, которая могла быть решена здесь много времени, но я не получаю то, что хочу.Как преобразовать этот URL-адрес в% 20?

У меня есть URL изображения, как это:

$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 в полном URL-адресе, не затрагивая '/' fullurl. Я не хочу, чтобы предложения регулярного выражения были выше.

Примечание: Часть усложнения заключается в том, что раздел каталога «Для нее» в 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 следует использовать только при кодировании строки будет используется в запросе URL.

Так что я предлагаю вам сохранить код 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

Я думаю, что ваше модифицированное решение будет мутировать символы '/' в пути. нет буено. –

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. Thanx. Однако решение xdazz порождает. –

+0

Теперь я проверил его решение. Это хорошо, за исключением того, что есть дополнительная папка '/' перед 'image'. Поэтому, пожалуйста, удалите это, прежде чем использовать его. –

Смежные вопросы