Maison  >  Article  >  développement back-end  >  Introduction à PHP utilisant parse_url et parse_str pour analyser les URL

Introduction à PHP utilisant parse_url et parse_str pour analyser les URL

不言
不言original
2018-07-03 17:11:272695parcourir

Cet article vous présente principalement deux méthodes d'analyse des URL en PHP (parse_url et parse_str), ainsi que l'introduction et l'utilisation de ces deux méthodes. Il est très complet et recommandé aux amis dans le besoin.

Il existe deux méthodes en PHP qui peuvent être utilisées pour analyser les URL, à savoir parse_url et parse_str.

parse_url
Analyser l'URL et renvoyer ses composants

mixed parse_url ( string $url [, int $component = -1 ] )

Cette fonction analyse une URL et renvoie un tableau associatif, contenant chaque composant qui apparaît dans le URL. sorte de composant.

Cette fonction n'est pas utilisée pour vérifier la validité de l'URL donnée, mais pour la décomposer en les parties répertoriées ci-dessous. Les URL incomplètes sont également acceptées et parse_url() tentera de les analyser aussi correctement que possible.

Paramètres

url L'URL à analyser. Les caractères invalides seront remplacés par _.

composant Spécifiez l'un des PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_USER, PHP_URL_PASS, PHP_URL_PATH, PHP_URL_QUERY ou PHP_URL_FRAGMENT pour obtenir la chaîne de la partie spécifiée de l'URL. (Sauf lorsque spécifié comme PHP_URL_PORT, une valeur entière sera renvoyée).

Valeur de retour

Pour les URL gravement non qualifiées, parse_url() peut renvoyer FALSE.

Si le paramètre composant est omis, un tableau associatif sera renvoyé, avec au moins un élément actuellement dans le tableau. Les clés possibles dans le tableau sont :

schéma - comme http
hôte
port
utilisateur
pass
chemin
requête - après le point d'interrogation ?
fragment - après le symbole de hachage #
Si le paramètre du composant est spécifié, parse_url() renvoie une chaîne (ou un entier lorsqu'il est spécifié comme PHP_URL_PORT) au lieu d'un tableau. Si le composant spécifié dans l'URL n'existe pas, NULL sera renvoyé.

Instance

<?php
$url = &#39;http://username:password@hostname/path?arg=value#anchor&#39;;
print_r(parse_url($url));
echo parse_url($url, PHP_URL_PATH);
?>

La routine ci-dessus affichera :

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path

parse_str

Convertir la chaîne Analyser en plusieurs variables

void parse_str ( string $str [, array &$arr ] )

Si str est la chaîne de requête transmise par l'URL, analysez-la en tant que variable et définissez-la sur la portée actuelle.

Pour obtenir le QUERY_STRING actuel, vous pouvez utiliser la variable $_SERVER['QUERY_STRING'].

Paramètre

str La chaîne d'entrée.

arr Si la deuxième variable arr est définie, la variable sera stockée dans ce tableau en tant qu'élément de tableau. ,

Exemple

<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first;  // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
parse_str($str, $output);
echo $output[&#39;first&#39;];  // value
echo $output[&#39;arr&#39;][0]; // foo bar
echo $output[&#39;arr&#39;][1]; // baz
?>

Je lisais le code source de php-resque il y a quelque temps et j'ai vu l'application de ces deux méthodes, j'ai l'impression qu'elles sont très bien utilisées et sont utilisées. pour analyser les paramètres de lien.

Le format du lien redis est : redis://user:pass@host:port/db?option1=val1&option2=val2. Est-ce le même que l'URL, il est donc facile à analyser en utilisant le. au-dessus de deux méthodes.

Adresse : https://github.com/chrisboulton/php-resque/blob/master/lib/Resque/Redis.php

Le code est le suivant :

    /**
     * Parse a DSN string, which can have one of the following formats:
     *
     * - host:port
     * - redis://user:pass@host:port/db?option1=val1&option2=val2
     * - tcp://user:pass@host:port/db?option1=val1&option2=val2
     *
     * Note: the &#39;user&#39; part of the DSN is not used.
     *
     * @param string $dsn A DSN string
     * @return array An array of DSN compotnents, with &#39;false&#39; values for any unknown components. e.g.
     *               [host, port, db, user, pass, options]
     */
    public static function parseDsn($dsn)
    {
        if ($dsn == &#39;&#39;) {
            // Use a sensible default for an empty DNS string
            $dsn = &#39;redis://&#39; . self::DEFAULT_HOST;
        }
        $parts = parse_url($dsn);
        // Check the URI scheme
        $validSchemes = array(&#39;redis&#39;, &#39;tcp&#39;);
        if (isset($parts[&#39;scheme&#39;]) && ! in_array($parts[&#39;scheme&#39;], $validSchemes)) {
            throw new \InvalidArgumentException("Invalid DSN. Supported schemes are " . implode(&#39;, &#39;, $validSchemes));
        }
        // Allow simple &#39;hostname&#39; format, which `parse_url` treats as a path, not host.
        if ( ! isset($parts[&#39;host&#39;]) && isset($parts[&#39;path&#39;])) {
            $parts[&#39;host&#39;] = $parts[&#39;path&#39;];
            unset($parts[&#39;path&#39;]);
        }
        // Extract the port number as an integer
        $port = isset($parts[&#39;port&#39;]) ? intval($parts[&#39;port&#39;]) : self::DEFAULT_PORT;
        // Get the database from the &#39;path&#39; part of the URI
        $database = false;
        if (isset($parts[&#39;path&#39;])) {
            // Strip non-digit chars from path
            $database = intval(preg_replace(&#39;/[^0-9]/&#39;, &#39;&#39;, $parts[&#39;path&#39;]));
        }
        // Extract any &#39;user&#39; and &#39;pass&#39; values
        $user = isset($parts[&#39;user&#39;]) ? $parts[&#39;user&#39;] : false;
        $pass = isset($parts[&#39;pass&#39;]) ? $parts[&#39;pass&#39;] : false;
        // Convert the query string into an associative array
        $options = array();
        if (isset($parts[&#39;query&#39;])) {
            // Parse the query string into an array
            parse_str($parts[&#39;query&#39;], $options);
        }
        return array(
            $parts[&#39;host&#39;],
            $port,
            $database,
            $user,
            $pass,
            $options,
        );
    }

Voici les deux méthodes permettant à PHP d'analyser les URL. J'espère que vous les aimerez.

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Introduction aux classes d'opérations et utilisation du recadrage d'image non déformé complet en PHP

Couramment utilisé dans thinkphp Introduction aux constantes système et aux variables système

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn