Extraire les paramètres GET d'une URL avec PHP
Publié le 06/07/2022 • Actualisé le 06/07/2022
Dans ce bout de code, nous voyons comment extraire les paramètres GET d'une URL avec PHP. On peut utiliser la fonction parse_url()
en fournissant la valeur PHP_URL_QUERY
en tant que second paramètre afin que la query string soit directement retournée à la place d'un tableau associatif. Puis, nous pouvons utiliser parse_str()
; comme vous pouvez le voir, elle gère parfaitement les paramètres présents sous forme de tableau.
<?php
declare(strict_types=1);
namespace App\Controller\Snippet;
/**
* J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
* Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
* ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
* Les services sont injectés dans le constructeur du contrôleur principal.
*/
trait Snippet209Trait
{
public function snippet209(): void
{
$url = 'https://www.strangebuzz.com/fr/recherche?q=api+assert&first=value&arr[]=foo+bar&arr[]=baz';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $queryString);
/** @var string $q */
$q = $queryString['q'] ?? '';
$arr = $queryString['arr'] ?? null;
echo '$url: '.$url.PHP_EOL;
echo '$q: '.$q.PHP_EOL;
echo '$arr: '.var_export($arr, true).PHP_EOL;
// That's it! 😁
}
}
Exécuter le snippet ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫ Plus sur Stackoverflow Lire la doc Snippet aléatoire
<?php
declare(strict_types=1);
namespace App\Tests\Integration\Controller\Snippets;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
/**
* @see Snippet209Trait
*/
final class Snippet209Test extends KernelTestCase
{
/**
* @see Snippet209Trait::snippet209
*/
public function testSnippet209(): void
{
$url = 'https://www.strangebuzz.com/fr/recherche?q=api+assert&first=value&arr[]=foo+bar&arr[]=baz';
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $queryString);
self::assertSame('api assert', $queryString['q']);
self::assertSame(['foo bar', 'baz'], $queryString['arr']);
}
}