From e3d22584664b28d31aa138f7b82554694254aae2 Mon Sep 17 00:00:00 2001 From: brettp Date: Sun, 31 Jan 2010 00:00:43 +0000 Subject: Fixes #959: Added elgg_http_remove_url_query_element() to remove a GET element instead of using faulty regexp. git-svn-id: http://code.elgg.org/elgg/trunk@3866 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/elgglib.php | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'engine/lib') diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php index 5c0f9aa2d..698a34b93 100644 --- a/engine/lib/elgglib.php +++ b/engine/lib/elgglib.php @@ -2462,15 +2462,23 @@ interface Friendable { } /** - * Rebuilds the parsed URL + * Rebuilds a parsed (partial) URL * * @param array $parts Associative array of URL components like parse_url() returns * @return str Full URL * @since 1.7 */ function elgg_http_build_url(array $parts) { - $port = (array_key_exists('port', $parts)) ? ":{$parts['port']}" : ''; - return "{$parts['scheme']}://{$parts['host']}{$port}{$parts['path']}?{$parts['query']}"; + // build only what's given to us. + $scheme = isset($parts['scheme']) ? "{$parts['scheme']}://" : ''; + $host = isset($parts['host']) ? "{$parts['host']}" : ''; + $port = isset($parts['port']) ? "{$parts['port']}" : ''; + $path = isset($parts['path']) ? "{$parts['path']}" : ''; + $query = isset($parts['query']) ? "?{$parts['query']}" : ''; + + $string = $scheme . $host . $port . $path . $query; + + return $string; } /** @@ -2502,6 +2510,33 @@ function elgg_validate_action_url($link) { return elgg_http_build_url($url); } +/** + * Removes a single elementry from a (partial) url query. + * + * @param string $url + * @param string $element + * @return string + */ +function elgg_http_remove_url_query_element($url, $element) { + $url = parse_url($url); + + if (isset($url['query'])) { + parse_str($url['query'], $query); + } else { + // nothing to remove. + return $url; + } + + if (array_key_exists($element, $query)) { + unset($query[$element]); + } + + $url['query'] = http_build_query($query); + $string = elgg_http_build_url($url); + return $string; +} + + /** * Returns the PHP INI setting in bytes * -- cgit v1.2.3