diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2005-12-04 17:44:27 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2005-12-04 17:44:27 +0000 |
commit | 2994c2367062a63394753fc367708b3d1f4955e8 (patch) | |
tree | 2b6375355843acd1bea60d1b172bdb8fd5cac3e7 /ext/standard/url.c | |
parent | eb83ca1cd30bb96377593ad36538e9867ba3b63a (diff) | |
download | php-git-2994c2367062a63394753fc367708b3d1f4955e8.tar.gz |
MFH:
Added 2nd optional parameter to parse_url() that allows retrieval of
individual URL components.
Added 3rd optional parameter to http_build_query() that allows custom param
separator.
Diffstat (limited to 'ext/standard/url.c')
-rw-r--r-- | ext/standard/url.c | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/ext/standard/url.c b/ext/standard/url.c index 6e499afe95..1e5dece138 100644 --- a/ext/standard/url.c +++ b/ext/standard/url.c @@ -328,15 +328,16 @@ end: } /* }}} */ -/* {{{ proto array parse_url(string url) +/* {{{ proto mixed parse_url(string url, [int url_component]) Parse a URL and return its components */ PHP_FUNCTION(parse_url) { char *str; int str_len; php_url *resource; + long key = -1; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &str, &str_len, &key) == FAILURE) { return; } @@ -346,6 +347,39 @@ PHP_FUNCTION(parse_url) RETURN_FALSE; } + if (key > -1) { + switch (key) { + case PHP_URL_SCHEME: + if (resource->scheme != NULL) RETVAL_STRING(resource->scheme, 1); + break; + case PHP_URL_HOST: + if (resource->host != NULL) RETVAL_STRING(resource->host, 1); + break; + case PHP_URL_PORT: + if (resource->port != 0) RETVAL_LONG(resource->port); + break; + case PHP_URL_USER: + if (resource->user != NULL) RETVAL_STRING(resource->user, 1); + break; + case PHP_URL_PASS: + if (resource->pass != NULL) RETVAL_STRING(resource->pass, 1); + break; + case PHP_URL_PATH: + if (resource->path != NULL) RETVAL_STRING(resource->path, 1); + break; + case PHP_URL_QUERY: + if (resource->query != NULL) RETVAL_STRING(resource->query, 1); + break; + case PHP_URL_FRAGMENT: + if (resource->fragment != NULL) RETVAL_STRING(resource->fragment, 1); + break; + default: + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid url component identifier %ld.", key); + RETVAL_FALSE; + } + goto done; + } + /* allocate an array for return */ array_init(return_value); @@ -366,8 +400,8 @@ PHP_FUNCTION(parse_url) add_assoc_string(return_value, "query", resource->query, 1); if (resource->fragment != NULL) add_assoc_string(return_value, "fragment", resource->fragment, 1); - - php_url_free(resource); +done: + php_url_free(resource); } /* }}} */ |