Maison >développement back-end >tutoriel php >2 façons d'analyser les URL en php

2 façons d'analyser les URL en php

墨辰丷
墨辰丷original
2018-06-13 10:57:092123parcourir

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_urlAnalyser 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 les différents composants qui apparaissent dans l'URL.

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é.

Exemple

Le code est le suivant :

<?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

Analyser la chaîne en plusieurs variables

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

Si str est la chaîne de requête transmise par l'URL) , il est analysé dans une variable et défini 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

Le code est le suivant :

<?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 . Je me sens très utile pour analyser les paramètres de lien Redis.

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,
        );
    }

Résumé : 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.

Recommandations associées :

Comment utiliser la fonction array_merge() en PHP pour fusionner deux tableaux

PHP peut réaliser une génération par lots de logos Méthode de différentes tailles

PHP utilise la fonction pcntl pour faire fonctionner plusieurs processus

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