Maison >développement back-end >tutoriel php >2 façons d'analyser les URL en php
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 = '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
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['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 . 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 '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, ); }
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!