I am given a page url like 'http://abc.com/test.php?a=1&b=2&c=3'. Now I have been told to change the value of b to 5 so that it becomes 'http://abc.com/test.php?a=1&b=5&c=3'.
i.e change from http://abc.com/test.php?a=1&b=2&c=3 to http://abc.com/test.php?a=1&b=5&c=3
Note: variable b here can refer to any name.
Answers
1
Use
parse_url() to extract the query string from the URL
parse_str() to split the query string into an array
array_merge() to add a new array "b" => 5
http_build_query() to re-build a query string
The remaining parts from the first step (protocol, host, path...) to re-build the full URL or - if you have the HTTP pecl extension - a http_build_url() with HTTP_URL_JOIN_QUERY will alleviate much of the work.
I'd use http_build_query, which nicely accepts an array of parameters and formats it correctly. You'd be able to unset the edit parameter from $_GET and push the rest of it into this function.
Note that your code has a missing call to htmlspecialchars(). A URL can contain characters that are active in HTML. So when outputting it into a link: Escape!
Some example:
unset($_GET['edit']); // delete edit parameter;
$_GET['pagenum'] = 5; // change page number
$qs = http_build_query($_GET);
... output link here.
Use
parse_url()
to extract the query string from the URLparse_str()
to split the query string into an arrayarray_merge()
to add a new array"b" => 5
http_build_query()
to re-build a query stringThe remaining parts from the first step (protocol, host, path...) to re-build the full URL or - if you have the
HTTP
pecl extension - ahttp_build_url()
withHTTP_URL_JOIN_QUERY
will alleviate much of the work.