diff --git a/modules/system/classes/ImageResizer.php b/modules/system/classes/ImageResizer.php index 2e5570ac5..0b1ae8af5 100644 --- a/modules/system/classes/ImageResizer.php +++ b/modules/system/classes/ImageResizer.php @@ -500,7 +500,10 @@ class ImageResizer $url = $resizedDisk->url($this->getPathToResizedImage()); } - return $url; + // Ensure that a properly encoded URL is returned + $segments = explode('/', $url); + $lastSegment = array_pop($segments); + return implode('/', $segments) . '/' . rawurlencode(rawurldecode($lastSegment)); } /** diff --git a/tests/fixtures/media/october space.png b/tests/fixtures/media/october space.png new file mode 100644 index 000000000..abf039cf0 Binary files /dev/null and b/tests/fixtures/media/october space.png differ diff --git a/tests/unit/system/classes/ImageResizerTest.php b/tests/unit/system/classes/ImageResizerTest.php index 04f4f70be..7e4da1920 100644 --- a/tests/unit/system/classes/ImageResizerTest.php +++ b/tests/unit/system/classes/ImageResizerTest.php @@ -320,6 +320,21 @@ class ImageResizerTest extends PluginTestCase ); } + public function testSpaceInFilename() + { + // Media URL with space + $this->setUpStorage(); + $this->copyMedia(); + + $imageResizer = new ImageResizer( + URL::to(MediaLibrary::url('october space.png')), + 100, + 100 + ); + + $this->assertStringContainsString('october%20space', $imageResizer->getResizedUrl(), 'Resized URLs are not properly URL encoded'); + } + protected function setUpStorage() { $this->app->useStoragePath(base_path('storage/temp'));