From 8e292966c9ee757fdf75dd4ab5276d908a98bc70 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 5 Oct 2019 20:45:00 +0200 Subject: [PATCH] Fix uri shortening for query para duplication --- Uri/UriFactory.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Uri/UriFactory.php b/Uri/UriFactory.php index 55afd8151..df4ae96e8 100644 --- a/Uri/UriFactory.php +++ b/Uri/UriFactory.php @@ -194,25 +194,25 @@ final class UriFactory private static function unique(string $url) : string { $parts = \explode('&', \str_replace('?', '&', $url)); + $query = ''; if (\count($parts) > 1) { $pars = \array_slice($parts, 1); $length = \count($pars); $url = $parts[0]; - $first = true; + $keys = []; - for ($i = 0; $i < $length; ++$i) { + for ($i = $length - 1; $i > -1; --$i) { $spl = \explode('=', $pars[$i]); - if (isset($spl[1])) { - $url .= $first ? '?' : '&'; - $url .= $spl[0] . '=' . $spl[1]; - $first = false; + if (isset($spl[1]) && !\in_array($spl[0], $keys)) { + $keys[] = $spl[0]; + $query = $spl[0] . '=' . $spl[1] . '&' . $query; } } } - return $url; + return $url . ((!empty($query) && $query[0] !== '&') ? '?' . \rtrim($query, '&') : ''); } /**