이 글에서는 주로 PHP에서 URL을 구문 분석하는 두 가지 방법(parse_url 및 parse_str)을 소개하고 이 두 가지 방법의 소개와 사용법을 소개하며 도움이 필요한 친구들에게 권장됩니다.
PHP에는 URL을 구문 분석하는 데 사용할 수 있는 두 가지 메서드, 즉parse_url과parse_str이 있습니다.
parse_urlURL을 구문 분석하고 해당 구성 요소를 반환합니다.
혼합 구문 분석 URL(string $url [, int $comComponent = -1 ] )
이 함수는 URL을 구문 분석하고 URL 종류의 구성 요소입니다.
이 기능은 주어진 URL의 유효성을 확인하는 데 사용되지 않고 아래 나열된 부분으로 분류하는 데 사용됩니다. 불완전한 URL도 허용되며,parse_url()은 이를 가능한 한 정확하게 구문 분석하려고 시도합니다.
Parameters
url 구문 분석할 URL입니다. 유효하지 않은 문자는 _로 대체됩니다.
comComponent 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를 반환할 수 있습니다.
구성요소 매개변수를 생략하면 연관 배열 배열이 반환되며 현재 배열에 하나 이상의 요소가 포함됩니다. 배열에 가능한 키는 다음과 같습니다.
scheme - http
host
port
user
pass
path
query - 물음표 뒤 ?
fragment - 해시 기호 뒤 #
구성 요소 매개변수가 지정된 경우,parse_url() 배열 대신 문자열(또는 PHP_URL_PORT로 지정된 경우 정수)을 반환합니다. URL에 지정된 구성 요소가 없으면 NULL이 반환됩니다.
Instance
코드는 다음과 같습니다.
<?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'] 변수를 사용할 수 있습니다.
Parameter
str 입력 문자열입니다.
arr 두 번째 변수 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의 소스코드를 읽다가 이 두 가지 방법을 적용한 것을 보고 설정을 파싱하는데 매우 유용하다고 느꼈습니다. 레디스 링크.
redis 링크 형식은 redis://user:pass@host:port/db?option1=val1&option2=val2 입니다. URL과 동일하니 위의 두 가지 방법을 이용하시면 쉽게 파싱하실 수 있습니다.
주소: 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 array_merge() 함수를 사용하여 두 배열을 병합하는 방법
PHP에서 pcntl 함수를 사용하여 여러 프로세스를 작동하는 방법
위 내용은 PHP에서 URL을 구문 분석하는 2가지 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!