X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FUtility%2FUnroutedUrlAssembler.php;h=5e50f5e2b30617633100d69e24f1c5f11e2410de;hp=6d68c1e4bc20affae374141e86e8a0f1bdcda8f1;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hpb=74df008bdbb3a11eeea356744f39b802369bda3c diff --git a/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php b/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php index 6d68c1e4b..5e50f5e2b 100644 --- a/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php +++ b/web/core/lib/Drupal/Core/Utility/UnroutedUrlAssembler.php @@ -2,6 +2,7 @@ namespace Drupal\Core\Utility; +use Drupal\Component\Utility\NestedArray; use Drupal\Component\Utility\UrlHelper; use Drupal\Core\GeneratedUrl; use Drupal\Core\PathProcessor\OutboundPathProcessorInterface; @@ -69,13 +70,17 @@ class UnroutedUrlAssembler implements UnroutedUrlAssemblerInterface { */ protected function buildExternalUrl($uri, array $options = [], $collect_bubbleable_metadata = FALSE) { $this->addOptionDefaults($options); - // Split off the fragment. - if (strpos($uri, '#') !== FALSE) { - list($uri, $old_fragment) = explode('#', $uri, 2); - // If $options contains no fragment, take it over from the path. - if (isset($old_fragment) && !$options['fragment']) { - $options['fragment'] = '#' . $old_fragment; - } + // Split off the query & fragment. + $parsed = UrlHelper::parse($uri); + $uri = $parsed['path']; + + $parsed += ['query' => []]; + $options += ['query' => []]; + + $options['query'] = NestedArray::mergeDeep($parsed['query'], $options['query']); + + if ($parsed['fragment'] && !$options['fragment']) { + $options['fragment'] = '#' . $parsed['fragment']; } if (isset($options['https'])) { @@ -88,7 +93,7 @@ class UnroutedUrlAssembler implements UnroutedUrlAssemblerInterface { } // Append the query. if ($options['query']) { - $uri .= (strpos($uri, '?') !== FALSE ? '&' : '?') . UrlHelper::buildQuery($options['query']); + $uri .= '?' . UrlHelper::buildQuery($options['query']); } // Reassemble. $url = $uri . $options['fragment'];