Je cherche à remplacer toutes les occurrences d'espaces dans les urls par %20. Comment puis-je le faire avec une expression rationnelle ?
Merci !
Je cherche à remplacer toutes les occurrences d'espaces dans les urls par %20. Comment puis-je le faire avec une expression rationnelle ?
Merci !
Pas besoin d'une regex ici, si vous voulez simplement remplacer un morceau de chaîne par un autre : en utilisant str_replace()
devrait être plus que suffisant :
$new = str_replace(' ', '%20', $your_string);
Mais, si vous voulez un peu plus que cela, et c'est probablement le cas, si vous travaillez avec des URL, vous devriez jeter un coup d'œil à l'outil urlencode()
fonction.
Utilisez urlencode()
plutôt que d'essayer de mettre en œuvre la vôtre. Soyez paresseux.
Je pense que vous devez utiliser rawurlencode() au lieu de urlencode() pour votre objectif.
échantillon
$image = 'some images.jpg';
$url = 'http://example.com/'
Avec urlencode($str), le résultat sera le suivant
echo $url.urlencode($image); //http://example.com/some+images.jpg
il ne passe pas du tout à %20
mais avec rawurlencode($image) produira
echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg
Vous avez plusieurs options pour le faire :
urlencode()
o rawurlencode()
- fonctions conçues pour encoder les URL pour le protocole httpstr_replace()
- remplacer la chaîne "machines lourdes" parstrtr()
- aurait de meilleures performances que str_replace()
lors du remplacement de plusieurs caractèrespreg_replace()
utiliser des expressions régulières (compatible perl)strtr()
En supposant que vous voulez remplacer "\t"
y " "
con "%20"
:
$replace_pairs = array(
"\t" => '%20',
" " => '%20',
);
return strtr( $text, $replace_pairs)
preg_replace()
Vous avez peu d'options ici, soit remplacer juste l'espace ~ ~
en remplaçant à nouveau l'espace et la tabulation ~[ \t]~
ou tous types d'espaces ~\s~
:
return preg_replace( '~\s~', '%20', $text);
Ou lorsque vous devez remplacer une chaîne de caractères comme ceci "\t \t \t \t"
avec un seul %20
:
return preg_replace( '~\s+~', '%20', $text);
J'ai supposé que vous souhaitiez réellement utiliser le remplacement manuel des chaînes de caractères et gérer d'autres types d'espaces comme les espaces insécables ( <code> </code> )
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.