patternphpMinor
Parsing URL query and appending it at end of the other URL
Viewed 0 times
thequeryparsingappendingandendotherurl
Problem
I am trying to grab the URL query of the URL which is in the browser's address bar, then append it at the end of the other URL and echo it to the browser.
So, if I visit my script at:
http://script.com/script.php?a=x&b=z
and the other URL is:
http://google.com/?c=v&d=u
then the browser will display:
http://google.com?a=x&b=z&c=v&d=u
This code is quite slow. How can I improve this?
So, if I visit my script at:
http://script.com/script.php?a=x&b=z
and the other URL is:
http://google.com/?c=v&d=u
then the browser will display:
http://google.com?a=x&b=z&c=v&d=u
This code is quite slow. How can I improve this?
function parse_me($from, &$to) {
// $to = array();
$from = urldecode($from);
$from = urldecode($from);
foreach (explode('&', $from) as $part) {
$part = explode('=', $part);
if ($key = array_shift($part)) {
$to[$key] = implode('', $part);
}
}
// print_r($to);
}
function add_qsrt_to_url($url) {
$other_query_string = arrayGet($_SERVER, 'QUERY_STRING', '');
$url_parsed = parse_url($url);
$new_qs_parsed = array();
if (isset($url_parsed['query'])) {
// parse_str($url_parsed['query'], $new_qs_parsed);
parse_me($url_parsed['query'], $new_qs_parsed);
}
$other_qs_parsed = array();
// parse_str($other_query_string, $other_qs_parsed);
parse_me($other_query_string, $other_qs_parsed);
// print_r($other_qs_parsed);
$final_query_string_array = array_merge($new_qs_parsed, $other_qs_parsed);
// var_dump($final_query_string_array);
$final_query_string = http_build_query($final_query_string_array);
$new_url = $url_parsed['scheme'] . '://' . $url_parsed['host'];
if (isset($url_parsed['path'])) {
$new_url = $new_url . $url_parsed['path'];
}
if ($final_query_string) {
$new_url = $new_url . '?' . $final_query_string;
}
return $new_url;
}
function arrayGet($array, $key, $default = NULL) {
return isset($array[$key]) ? $array[$key] : $default;
}Solution
I'd write it like this
Result:
http://example.com/?a=b&c=d&e=f
function concatQueryVars($first, $second) {
$url = strtok($first, '?');
$first = parse_url($first, PHP_URL_QUERY);
$second = parse_url($second, PHP_URL_QUERY);
return !empty($url) &&
!empty($first) &&
!empty($second)
? $url . '?' . $first. '&' . $second : false;
}
echo concatQueryVars('http://example.com/?a=b', 'http://example.com/?c=d&e=f');Result:
http://example.com/?a=b&c=d&e=f
Code Snippets
function concatQueryVars($first, $second) {
$url = strtok($first, '?');
$first = parse_url($first, PHP_URL_QUERY);
$second = parse_url($second, PHP_URL_QUERY);
return !empty($url) &&
!empty($first) &&
!empty($second)
? $url . '?' . $first. '&' . $second : false;
}
echo concatQueryVars('http://example.com/?a=b', 'http://example.com/?c=d&e=f');Context
StackExchange Code Review Q#119504, answer score: 2
Revisions (0)
No revisions yet.