2010-05-14 7 views
9

Existe-t-il un moyen d'urlencode à l'exception des séparateurs de répertoire/dans le chemin?urlencode excepté/

comme

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

Répondre

27

Vous pouvez utiliser

donc tous ensemble en une ligne:

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

Ce serait la manière la plus correcte d'un point de vue conceptuel, même si en pratique le 'str_replace' serait plus simple. De toute façon +1 pour 'rawurlencode'; c'est toujours la bonne chose, alors que 'urlencode' est parfois une mauvaise chose. – bobince

14

les remplacer à nouveau:

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

Notez que si vous allez passer le résultat dans une chaîne de requête, vous ne devriez pas faire le remplacement ci-dessus - utilisez uniquement urlencode . Si vous l'utilisez dans la partie path, vous devez utiliser rawurlencode à la place.

+0

Celui-ci sonne bien aussi. Cela doit être beaucoup plus rapide que la réponse choisie, je suppose. –

+0

Ceci couvre 99% des cas. Les 1% sont les chemins dans lesquels 2% F n'est pas destiné à être converti mais une partie réelle de la chaîne de chemin. – Tyblitz

+0

@Tyblitz 2% F serait codé à 2% 25F s'il faisait partie de la chaîne de chemin. – Phil

2

Cela devrait résoudre votre problème.

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); 
Questions connexes