Je cherche à remplacer toutes les occurrences d'espaces dans les URL par% 20. Comment ferais-je cela avec regex?
Merci!
Pas besoin de regex ici, si vous voulez juste remplacer un morceau de chaîne par un autre: utilisez str_replace()
devrait être plus que suffisant:
$new = str_replace(' ', '%20', $your_string);
Mais si vous voulez un peu plus que cela, et vous le faites probablement, si vous travaillez avec des URL, vous devriez jeter un oeil à la urlencode()
fonction.
Utilisez urlencode()
plutôt que d'essayer d'implémenter les vôtres. Être fainéant.
Je pense que vous devez utiliser rawurlencode () à la place, urlencode () à cette fin.
échantillon
$image = 'some images.jpg';
$url = 'http://example.com/'
Avec urlencode ($ str) résultera
echo $url.urlencode($image); //http://example.com/some+images.jpg
sa pas changer à% 20 du tout
mais avec rawurlencode ($ image) produira
echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg
Vous avez plusieurs options pour le faire, soit:
urlencode()
ou rawurlencode()
- fonctions conçues pour coder des URL pour le protocole httpstr_replace()
- Chaîne "Machinerie lourde" remplacestrtr()
- aurait de meilleures performances que str_replace()
lors du remplacement de plusieurs caractèrespreg_replace()
utilise des expressions régulières (compatible Perl)strtr()
En supposant que vous souhaitiez remplacer "\t"
Et " "
Par "%20"
:
$replace_pairs = array(
"\t" => '%20',
" " => '%20',
);
return strtr( $text, $replace_pairs)
preg_replace()
Vous avez peu d'options ici, soit remplacer simplement l'espace ~ ~
, Encore une fois remplacer l'espace et l'onglet ~[ \t]~
Ou tout types d'espaces~\s~
:
return preg_replace( '~\s~', '%20', $text);
Ou lorsque vous devez remplacer une chaîne comme celle-ci "\t \t \t \t"
Par un seul %20
:
return preg_replace( '~\s+~', '%20', $text);
J'ai supposé que vous vouliez vraiment utiliser le remplacement manuel des chaînes et gérer plus de types d'espaces, tels que des espaces insécables (
)
public static function normalizeUrl(string $url) {
$parts = parse_url($url);
return $parts['scheme'] .
'://' .
$parts['Host'] .
implode('/', array_map('rawurlencode', explode('/', $parts['path'])));
}
$result = preg_replace('/ /', '%20', 'your string here');
vous pouvez également envisager d'utiliser
$result = urlencode($yourstring)
pour échapper à d'autres personnages spéciaux aussi