この記事では主に、PHP で URL を解析する 2 つの方法 (parse_url と parse_str)、およびこれら 2 つの方法の導入と使用方法について説明します。非常に包括的で、困っている友人にお勧めします。
PHP には、URL の解析に使用できる 2 つのメソッド、parse_url と parse_str があります。
parse_url
URL を解析してそのコンポーネントを返す
mixed parse_url ( string $url [, int $component = -1 ] )
この関数は URL を解析し、URL 部分に表示されるさまざまなコンポーネントを含む連想配列を返します。 。
この関数は、指定された URL の有効性を検証するために使用されるのではなく、URL を以下にリストされている部分に分割するために使用されます。不完全な URL も受け入れられ、parse_url() はそれらをできるだけ正確に解析しようとします。
パラメータ
url 解析する URL。無効な文字は_に置き換えられます。
component PHP_URL_SCHEME、PHP_URL_HOST、PHP_URL_PORT、PHP_URL_USER、PHP_URL_PASS、PHP_URL_PATH、PHP_URL_QUERY、または PHP_URL_FRAGMENT のいずれかを指定して、URL の指定された部分の文字列を取得します。 (PHP_URL_PORT として指定された場合を除き、整数値が返されます)。
戻り値
大幅に修飾されていない URL の場合、parse_url() は FALSE を返す場合があります。
コンポーネントパラメータが省略された場合、連想配列配列が返され、現在少なくとも 1 つの要素が配列内に存在します。配列内の可能なキーは次のとおりです:
scheme - http
host
port
user
pass
path
query - 疑問符の後ろ?
fragment - ハッシュ記号の後
#component パラメーターが指定されている場合、parse_url() は配列の代わりに文字列 (または PHP_URL_PORT として指定されている場合は整数) を返します。 URL 内に指定されたコンポーネントが存在しない場合は、NULL が返されます。
例
<?php $url = 'http://username:password@hostname/path?arg=value#anchor'; print_r(parse_url($url)); echo parse_url($url, PHP_URL_PATH); ?>
上記のルーチンは出力します:
Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor ) /path
parse_str
文字列を複数の変数に解析します
void parse_str ( string $str [, array &$arr ] )
str が URL によって渡されたクエリ文字列である場合、それを変数に解析し、現在のスコープに設定します。
現在の QUERY_STRING を取得するには、$_SERVER['QUERY_STRING'] 変数を使用できます。
パラメータ
str 入力文字列。
arr 2 番目の変数 arr が設定されている場合、変数は代わりに配列要素としてこの配列に格納されます。 ,
Example
<?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 ?>
先ほどphp-resqueのソースコードを読んでいたのですが、この2つのメソッドが応用されているのを見て、とてもよく使われていると感じました。 Redis リンクを解析するためにセットアップします。
Redis リンクの形式は、redis://user:pass@host:port/db?option1=val1&option2=val2 です。これは URL と同じなので、以上の2つの方法です。
アドレス: https://github.com/chrisboulton/php-resque/blob/master/lib/Resque/Redis.php
コードは次のとおりです:
/** * 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, ); }
上 これらは、PHP で URL を解析する 2 つの方法です。気に入っていただければ幸いです。
以上がこの記事の全内容です。皆様の学習に少しでもお役に立てれば幸いです。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
PHP のフル機能の非変形画像トリミングの操作クラスと使用法の紹介
thinkphp で一般的に使用されるシステム定数とシステム変数の概要
#
以上がparse_url と parse_str を使用して URL を解析する php の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。