2013-06-18 10 views

Odpowiedz

4

Spróbuj tego:

$str = 'http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip'; 
$pos = strrpos($str, '/') + 1; 
$result = substr($str, 0, $pos) . urlencode(substr($str, $pos)); 

Patrzysz do ostatniego wystąpienia znaku slash. Część przed nią jest w porządku, po prostu to skopiuj. A reszta to urlencode.

+1

Działa doskonale z brakującym ")" na końcu :) –

+1

@WinstonSmith można upvote odpowiedź;) – ducin

+0

Chciałbym również użyj rawurlencode zamiast urlencode dla nazw plików –

0

Wyciągnij nazwę pliku i uciekaj.

$temp = explode('/', $myurl); 
$filename = array_pop($temp); 

$newFileName = urlencode($filename); 

$myNewUrl = implode('/', array_push($newFileName)); 
+0

to jest powolne rozwiązanie. Nie trzeba zrzucać łańcucha do tablicy. – ducin

0

Przede wszystkim here's why należy używać rawurlencode zamiast urlencode.

Aby odpowiedzieć na pytanie, zamiast szukać igły w stogu siana i ryzykować nie kodowaniem innych możliwych znaków specjalnych w adresie URL, wystarczy zakodować całość, a następnie naprawić ukośniki (i dwukropek).

<?php 
$myurl = 'http://www.example.com/some_folder/some file [that] needs "to" be (encoded).zip'; 
$myurl = rawurlencode($myurl); 
$myurl = str_replace('%3A',':',str_replace('%2F','/',$myurl)); 

Wyniki w tym:

http://www.example.com/some_folder/some%20file%20%5Bthat%5D%20needs%20%22to%22%20be%20%28encoded%29.zip