|
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