Extraire les paramètres GET d'une URL avec PHP

Publié le 06/07/2022 • Mis à jour le 06/07/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

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);
        $q = $queryString['q'] ?? null;
        $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']);
    }
}