Czy istnieje sposób na urlencode oprócz katalogu seperators/w ścieżce?urlencode except/
jak
urlencode('/this/is/my/file right here.jpg');
Czy istnieje sposób na urlencode oprócz katalogu seperators/w ścieżce?urlencode except/
jak
urlencode('/this/is/my/file right here.jpg');
Można użyć
explode
podzielić swoją drogę do segmentów ścieżki,array_map
zastosować rawurlencode
na każdej pozycji (nie używać urlencode
, że to tylko dla application/x-www-form-urlencoded encoded argumenty zapytania!) iimplode
, aby ponownie połączyć segmenty.Więc wszyscy razem w jednym wierszu:
$path = implode('/', array_map('rawurlencode', explode('/', $path)));
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.
Ten brzmi zbyt miły. Musi być znacznie szybszy niż wybrana odpowiedź, jak sądzę. –
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
@ Tyblitz 2% F zostanie zakodowany do 2% 25F, jeśli był częścią ciągu ścieżki. – Phil
To powinno rozwiązać twój problem.
str_replace("%2F","/",urlencode('/this/is/my/file right here.jpg'));
$array = explode('/', '/this/is/my/file right here.jpg');
foreach ($array as &$value) {
$value = urlencode($value);
}
print implode('/', $array);
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