|
11 | 11 |
|
12 | 12 | namespace Symfony\Bundle\FrameworkBundle\Controller; |
13 | 13 |
|
| 14 | +use Symfony\Component\HttpFoundation\HeaderUtils; |
14 | 15 | use Symfony\Component\HttpFoundation\RedirectResponse; |
15 | 16 | use Symfony\Component\HttpFoundation\Request; |
16 | 17 | use Symfony\Component\HttpFoundation\Response; |
@@ -65,7 +66,7 @@ public function redirectAction(Request $request, string $route, bool $permanent |
65 | 66 |
|
66 | 67 | if ($keepQueryParams) { |
67 | 68 | if ($query = $request->server->get('QUERY_STRING')) { |
68 | | - $query = self::parseQuery($query); |
| 69 | + $query = HeaderUtils::parseQuery($query); |
69 | 70 | } else { |
70 | 71 | $query = $request->query->all(); |
71 | 72 | } |
@@ -185,49 +186,4 @@ public function __invoke(Request $request): Response |
185 | 186 |
|
186 | 187 | throw new \RuntimeException(sprintf('The parameter "path" or "route" is required to configure the redirect action in "%s" routing configuration.', $request->attributes->get('_route'))); |
187 | 188 | } |
188 | | - |
189 | | - private static function parseQuery(string $query) |
190 | | - { |
191 | | - $q = []; |
192 | | - |
193 | | - foreach (explode('&', $query) as $v) { |
194 | | - if (false !== $i = strpos($v, "\0")) { |
195 | | - $v = substr($v, 0, $i); |
196 | | - } |
197 | | - |
198 | | - if (false === $i = strpos($v, '=')) { |
199 | | - $k = urldecode($v); |
200 | | - $v = ''; |
201 | | - } else { |
202 | | - $k = urldecode(substr($v, 0, $i)); |
203 | | - $v = substr($v, $i); |
204 | | - } |
205 | | - |
206 | | - if (false !== $i = strpos($k, "\0")) { |
207 | | - $k = substr($k, 0, $i); |
208 | | - } |
209 | | - |
210 | | - $k = ltrim($k, ' '); |
211 | | - |
212 | | - if (false === $i = strpos($k, '[')) { |
213 | | - $q[] = bin2hex($k).$v; |
214 | | - } else { |
215 | | - $q[] = substr_replace($k, bin2hex(substr($k, 0, $i)), 0, $i).$v; |
216 | | - } |
217 | | - } |
218 | | - |
219 | | - parse_str(implode('&', $q), $q); |
220 | | - |
221 | | - $query = []; |
222 | | - |
223 | | - foreach ($q as $k => $v) { |
224 | | - if (false !== $i = strpos($k, '_')) { |
225 | | - $query[substr_replace($k, hex2bin(substr($k, 0, $i)).'[', 0, 1 + $i)] = $v; |
226 | | - } else { |
227 | | - $query[hex2bin($k)] = $v; |
228 | | - } |
229 | | - } |
230 | | - |
231 | | - return $query; |
232 | | - } |
233 | 189 | } |
0 commit comments