note 125844 added to function.parse-url
| From: | kibblewhite+php at live dot com | Date: | Fri, 19 Feb 2021 18:11:19 +0000 |
| Subject: | note 125844 added to function.parse-url | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-219098@lists.php.net to get a copy of this message | ||
This function 'parse_rebuild_url' will parse and reassemble your URL with new values
provided by the 'overwrite_parsed_url_array' back together.
It is also possible to overwrite the URL components by key name and to merge or overwrite query
parameters.
<?php
$test_url = 'http://usr:pss@example.com:81/mypath/myfile.html?a=b&b[]=2&b[]=3&z=9#myfragment';
$new_url_01_overwrite_query_params = parse_rebuild_url( $test_url, array(
'host' => 'new-hostname.tld',
'query' => array(
'test' => 'Hello World',
'a' => array( 'c', 'd' ),
'z' => 8
),
'fragment' => 'new-fragment-value'
), false );
$new_url_02_mergewith_query_params = parse_rebuild_url( $test_url, array(
'query' => array(
'test' => 'Hello World',
'a' => array( 'c', 'd' ),
'z' => 8
),
'fragment' => 'new-fragment-value'
), true );
function parse_rebuild_url( $url, $overwrite_parsed_url_array, $merge_query_parameters = true )
{
$parsed_url_array = parse_url( $url );
$parsed_url_keys_array = array(
'scheme' => null,
'abempty' => isset( $parsed_url_array['scheme'] ) ?
'://' : null,
'user' => null,
'authcolon' => isset( $parsed_url_array['pass'] ) ?
':' : null,
'pass' => null,
'authat' => isset( $parsed_url_array['user'] ) ?
'@' : null,
'host' => null,
'portcolon' => isset( $parsed_url_array['port'] ) ?
':' : null,
'port' => null,
'path' => null,
'param' => isset( $parsed_url_array['query'] ) ?
'?' : null,
'query' => null,
'hash' => isset( $parsed_url_array['fragment'] ) ?
'#' : null,
'fragment' => null
);
if ( isset( $parsed_url_array['query'] ) && $merge_query_parameters ===
true ) {
parse_str( $parsed_url_array['query'], $query_array );
$overwrite_parsed_url_array['query'] = array_merge_recursive( $query_array,
$overwrite_parsed_url_array['query'] );
}
$query_parameters = http_build_query( $overwrite_parsed_url_array['query'], null,
'&', PHP_QUERY_RFC1738 );
$overwrite_parsed_url_array['query'] = urldecode( preg_replace(
'/%5B[0-9]+%5D/simU', '%5B%5D', $query_parameters ) );
$fully_parsed_url_array = array_filter( array_merge( $parsed_url_keys_array,
$parsed_url_array, $overwrite_parsed_url_array ) );
return implode( null, $fully_parsed_url_array );
}
----
Server IP: 45.112.84.4
Probable Submitter: 45.112.85.247 (proxied: 46.27.180.180)
----
Manual Page -- http://php.net/manual/en/function.parse-url.php
Edit -- https://master.php.net/note/edit/125844
Del: integrated -- https://master.php.net/note/delete/125844/integrated
Del: useless -- https://master.php.net/note/delete/125844/useless
Del: bad code -- https://master.php.net/note/delete/125844/bad+code
Del: spam -- https://master.php.net/note/delete/125844/spam
Del: non-english -- https://master.php.net/note/delete/125844/non-english
Del: in docs -- https://master.php.net/note/delete/125844/in+docs
Del: other reasons-- https://master.php.net/note/delete/125844
Reject -- https://master.php.net/note/reject/125844
Search -- https://master.php.net/manage/user-notes.php