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');
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');
Vous pouvez utiliser
explode
de diviser votre chemin dans les segments de chemin,array_map
à appliquer rawurlencode
sur chaque élément (ne pas utiliser urlencode
, qui est seulement pour application/x-www-form-urlencoded encoded arguments de requête!), etimplode
pour remettre les segments ensemble.donc tous ensemble en une ligne:
$path = implode('/', array_map('rawurlencode', explode('/', $path)));
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.
Celui-ci sonne bien aussi. Cela doit être beaucoup plus rapide que la réponse choisie, je suppose. –
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
@Tyblitz 2% F serait codé à 2% 25F s'il faisait partie de la chaîne de chemin. – Phil
Cela devrait résoudre votre problème.
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);
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