Maison >développement back-end >tutoriel php >Introduction à PHP utilisant parse_url et parse_str pour analyser les URL
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 = 'http://username:password@hostname/path?arg=value#anchor'; 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['first']; // value echo $output['arr'][0]; // foo bar echo $output['arr'][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 'user' part of the DSN is not used. * * @param string $dsn A DSN string * @return array An array of DSN compotnents, with 'false' values for any unknown components. e.g. * [host, port, db, user, pass, options] */ public static function parseDsn($dsn) { if ($dsn == '') { // Use a sensible default for an empty DNS string $dsn = 'redis://' . self::DEFAULT_HOST; } $parts = parse_url($dsn); // Check the URI scheme $validSchemes = array('redis', 'tcp'); if (isset($parts['scheme']) && ! in_array($parts['scheme'], $validSchemes)) { throw new \InvalidArgumentException("Invalid DSN. Supported schemes are " . implode(', ', $validSchemes)); } // Allow simple 'hostname' format, which `parse_url` treats as a path, not host. if ( ! isset($parts['host']) && isset($parts['path'])) { $parts['host'] = $parts['path']; unset($parts['path']); } // Extract the port number as an integer $port = isset($parts['port']) ? intval($parts['port']) : self::DEFAULT_PORT; // Get the database from the 'path' part of the URI $database = false; if (isset($parts['path'])) { // Strip non-digit chars from path $database = intval(preg_replace('/[^0-9]/', '', $parts['path'])); } // Extract any 'user' and 'pass' values $user = isset($parts['user']) ? $parts['user'] : false; $pass = isset($parts['pass']) ? $parts['pass'] : false; // Convert the query string into an associative array $options = array(); if (isset($parts['query'])) { // Parse the query string into an array parse_str($parts['query'], $options); } return array( $parts['host'], $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!