3 votes

Remplacer les valeurs dans une chaîne de requête URI

J'ai une partie d'une chaîne de requête dans laquelle je veux effectuer un remplacement. Je veux utiliser preg_replace mais je suis un peu bloqué par le regex.

Quelqu'un peut-il m'aider ? Ce que j'ai besoin de remplacer, ce sont les variables GET.

Voici la chaîne :

bikeType=G&nikeNumber=4351

8voto

Matteo Riva Points 14340

PHP dispose d'une fonction pratique pour analyser les chaînes de requête : parse_str() . Vous pourriez y jeter un coup d'œil ou fournir plus de détails, car votre question n'est pas très claire.

4voto

Gordon Points 156415

Vous pouvez utiliser parse_str comme cela a déjà été mentionné.
De plus, si vous voulez les remettre dans une chaîne de requête, vous pouvez utiliser http_build_query

Ejemplo:

parse_str('bikeType=G&nikeNumber=4351', $params);
$params['bikeType'] = 'F';
$params['nikeNumber'] = '1234';
echo http_build_query($params, '', '&'); 

Sortie

bikeType=F&nikeNumber=1234

Veuillez noter que vous ne devez pas utiliser parse_str sans le deuxième argument (ou du moins pas avec une certaine considération). Si vous ne le faites pas, PHP créera des variables à partir des paramètres de la requête dans la portée actuelle. Cela peut conduire à des problèmes de sécurité. Les utilisateurs malveillants peuvent l'utiliser pour écraser d'autres variables, par exemple

// somewhere in your code you assigned the current user's role
$role = $_SESSION['currentUser']['role'];
// later in the same scope you do
parse_str('bikeType=G&nikeNumber=4351&role=admin');
// somewhere later you check if the user is an admin
if($role === "admin") { /* trouble */ }

Autre remarque : l'utilisation du troisième paramètre pour http_build_query est recommandé, car l'encodage approprié pour une esperluette est & . Certains validateurs se plaindront si vous ne mettez que l'élément & là-dedans.

Prograide.com

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.

Powered by:

X