From 78c524a72622309340e42915cf4cbeb1e6ed5cde Mon Sep 17 00:00:00 2001 From: Markus Klein <markus.klein@typo3.org> Date: Wed, 24 May 2017 14:09:42 +0200 Subject: [PATCH] [BUGFIX] Ensure correct URL generation with http_build_query() http_build_query() internally uses the PHP setting arg-separator.output to identify the URL parameter separator. This does not seem appropriate for URLs generated by TYPO3. Use the optional parameters of http_build_query() to get the desired functionality. Releases: master, 8.7, 7.6 Resolves: #81366 Change-Id: Ie2df9207b1967257d6327ff1103503e6a58d5cdf Reviewed-on: https://review.typo3.org/52934 Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Andreas Fernandez <typo3@scripting-base.de> Reviewed-by: Tymoteusz Motylewski <t.motylewski@gmail.com> Tested-by: Tymoteusz Motylewski <t.motylewski@gmail.com> Reviewed-by: Georg Ringer <georg.ringer@gmail.com> Tested-by: Georg Ringer <georg.ringer@gmail.com> --- .../Classes/Backend/ToolbarItems/ShortcutToolbarItem.php | 2 +- typo3/sysext/core/Classes/LinkHandling/PageLinkHandler.php | 2 +- typo3/sysext/core/Classes/Resource/ResourceStorage.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/typo3/sysext/backend/Classes/Backend/ToolbarItems/ShortcutToolbarItem.php b/typo3/sysext/backend/Classes/Backend/ToolbarItems/ShortcutToolbarItem.php index 85159927b907..9728458357b7 100644 --- a/typo3/sysext/backend/Classes/Backend/ToolbarItems/ShortcutToolbarItem.php +++ b/typo3/sysext/backend/Classes/Backend/ToolbarItems/ShortcutToolbarItem.php @@ -324,7 +324,7 @@ class ShortcutToolbarItem implements ToolbarItemInterface $module = $returnUrlParameters['M']; $returnUrl = BackendUtility::getModuleUrl($module, $returnUrlParameters); $parameters['returnUrl'] = $returnUrl; - $url = $parsedUrl['path'] . '?' . http_build_query($parameters); + $url = $parsedUrl['path'] . '?' . http_build_query($parameters, '', '&', PHP_QUERY_RFC3986); } } diff --git a/typo3/sysext/core/Classes/LinkHandling/PageLinkHandler.php b/typo3/sysext/core/Classes/LinkHandling/PageLinkHandler.php index 3c0177c02851..a7ee98d0bb4c 100644 --- a/typo3/sysext/core/Classes/LinkHandling/PageLinkHandler.php +++ b/typo3/sysext/core/Classes/LinkHandling/PageLinkHandler.php @@ -77,7 +77,7 @@ class PageLinkHandler implements LinkHandlingInterface unset($data['type']); } if (!empty($data)) { - $result['parameters'] = http_build_query($data); + $result['parameters'] = http_build_query($data, '', '&', PHP_QUERY_RFC3986); } if (empty($result)) { $result['pageuid'] = 'current'; diff --git a/typo3/sysext/core/Classes/Resource/ResourceStorage.php b/typo3/sysext/core/Classes/Resource/ResourceStorage.php index a4575fc7e777..8a1be9f12396 100644 --- a/typo3/sysext/core/Classes/Resource/ResourceStorage.php +++ b/typo3/sysext/core/Classes/Resource/ResourceStorage.php @@ -1294,7 +1294,7 @@ class ResourceStorage implements ResourceStorageInterface } $queryParameterArray['token'] = GeneralUtility::hmac(implode('|', $queryParameterArray), 'resourceStorageDumpFile'); - $publicUrl = 'index.php?' . str_replace('+', '%20', http_build_query($queryParameterArray)); + $publicUrl = 'index.php?' . http_build_query($queryParameterArray, '', '&', PHP_QUERY_RFC3986); } // If requested, make the path relative to the current script in order to make it possible -- GitLab