2010-05-14 15 views
9

Czy istnieje sposób na urlencode oprócz katalogu seperators/w ścieżce?urlencode except/

jak

urlencode('/this/is/my/file right here.jpg'); 

Odpowiedz

27

Można użyć

Więc wszyscy razem w jednym wierszu:

$path = implode('/', array_map('rawurlencode', explode('/', $path))); 
+0

To byłby najbardziej pojęciowo poprawny sposób robienia tego, chociaż w praktyce 'str_replace' byłby prostszy. Tak czy inaczej +1 dla 'rawurlencode'; zawsze jest to słuszne, podczas gdy 'urlencode' jest czasami niewłaściwą rzeczą. – bobince

14

Wymień je ponownie:

str_replace('%2F', '/', urlencode('/this/is/my/file right here.jpg')); 

Pamiętaj, że jeśli masz zamiar przekazać wynik w ciągu kwerendy, nie należy robić powyżej wymiany - używać tylko urlencode . Jeśli używasz go w ścieżce, powinieneś zamiast tego użyć rawurlencode.

+0

Ten brzmi zbyt miły. Musi być znacznie szybszy niż wybrana odpowiedź, jak sądzę. –

+0

Dotyczy to 99% przypadków. 1% to ścieżki, w których 2% F nie jest przeznaczone do konwersji, ale stanowi faktyczną część ciągu ścieżki. – Tyblitz

+0

@ Tyblitz 2% F zostanie zakodowany do 2% 25F, jeśli był częścią ciągu ścieżki. – Phil

2

To powinno rozwiązać twój problem.

str_replace("%2F","/",urlencode('/this/is/my/file right here.jpg')); 
2
$array = explode('/', '/this/is/my/file right here.jpg'); 
foreach ($array as &$value) { 
     $value = urlencode($value); 
} 
print implode('/', $array); 
Powiązane problemy