PHP解析URL関数parse_についてurlとparse_str
5818 ワード
PHPには2つの方法でURLを解析することができます.それぞれparse_です.urlとparse_str.
parse_urlはURLを解析し、その構成部分を返します.
mixed parse_url ( string $url [, int $component = -1 ] )
この関数は、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で指定された部分のstringを取得する.(PHP_URL_PORTとして指定した場合を除き、integerの値が返されます).
戻り値
重大な不合格のURLに対してparse_url()はFALSEを返す可能性があります.
componentパラメータを省略すると、関連配列arrayが返され、現在少なくとも1つの要素が配列に存在します.配列内の可能なキーは次のとおりです.
http host port user pass path queryのようなscheme-疑問符?≪後fragment|After fragment|Eas≫-ハッシュ記号#の後にcomponentパラメータが指定されている場合、parse_url()は、arrayではなくstring(またはPHP_URL_PORTとして指定された場合にinteger)を返します.URLに指定されたコンポーネントが存在しない場合、NULLが返されます.
≪インスタンス|Instance|emdw≫
以上のルーチンが出力します.
parse_str
文字列を複数の変数に解析
void parse_str ( string $str [, array &$arr ] )
strがURLが渡されるクエリー文字列(query string)の場合、strは変数として解析され、現在の役割ドメインに設定されます.
現在のQUERY_を取得STRING、あなたは$_を使うことができますSERVER['QUERY_STRING']変数.
パラメータ
str入力文字列.
arr 2番目の変数arrが設定されている場合、変数は配列要素としてこの配列に格納され、代替として使用されます.
≪インスタンス|Instance|emdw≫
この間php-resqueのソースコードを読んで、その中でこの2つの方法の応用を見て、redisリンクの設定を解析するのによく使われているような気がします.
redisリンクのフォーマットは次のとおりです.redis://user:pass@host:port/db?option 1=val 1&option 2=val 2は、URLと同じかどうか、以上の2つの方法で解析しやすいです.
アドレス:https://github.com/chrisboulton/php-resque/blob/master/lib/Resque/Redis.php
コードは次のとおりです.
以上、php解析URL関数parse_について個人的に説明します.urlとparse_strの理解、ここに記録して、みんなに分かち合って、小さい仲間に役に立つことを望みます
parse_urlはURLを解析し、その構成部分を返します.
mixed parse_url ( string $url [, int $component = -1 ] )
この関数は、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で指定された部分のstringを取得する.(PHP_URL_PORTとして指定した場合を除き、integerの値が返されます).
戻り値
重大な不合格のURLに対してparse_url()はFALSEを返す可能性があります.
componentパラメータを省略すると、関連配列arrayが返され、現在少なくとも1つの要素が配列に存在します.配列内の可能なキーは次のとおりです.
http host port user pass path queryのようなscheme-疑問符?≪後fragment|After fragment|Eas≫-ハッシュ記号#の後にcomponentパラメータが指定されている場合、parse_url()は、arrayではなくstring(またはPHP_URL_PORTとして指定された場合にinteger)を返します.URLに指定されたコンポーネントが存在しない場合、NULLが返されます.
≪インスタンス|Instance|emdw≫
$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)の場合、strは変数として解析され、現在の役割ドメインに設定されます.
現在のQUERY_を取得STRING、あなたは$_を使うことができますSERVER['QUERY_STRING']変数.
パラメータ
str入力文字列.
arr 2番目の変数arrが設定されている場合、変数は配列要素としてこの配列に格納され、代替として使用されます.
≪インスタンス|Instance|emdw≫
$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?option 1=val 1&option 2=val 2は、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関数parse_について個人的に説明します.urlとparse_strの理解、ここに記録して、みんなに分かち合って、小さい仲間に役に立つことを望みます