diff --git a/app/Service/Storage/StorageFileNameParser.php b/app/Service/Storage/StorageFileNameParser.php index aa17d5b..6907533 100644 --- a/app/Service/Storage/StorageFileNameParser.php +++ b/app/Service/Storage/StorageFileNameParser.php @@ -29,7 +29,8 @@ class StorageFileNameParser public function getMovedFileName(): ?string { if ($this->fileName && $this->extension) { - return substr($this->fileName,0,50).'_'.$this->uuid.'.'.$this->extension; + $fileName = substr($this->fileName, 0, 50).'_'.$this->uuid.'.'.$this->extension; + return mb_convert_encoding($fileName, 'UTF-8', 'UTF-8'); } return $this->uuid; } diff --git a/tests/Unit/Service/Storage/StorageFileNameParserTest.php b/tests/Unit/Service/Storage/StorageFileNameParserTest.php index 6909e06..d609669 100644 --- a/tests/Unit/Service/Storage/StorageFileNameParserTest.php +++ b/tests/Unit/Service/Storage/StorageFileNameParserTest.php @@ -25,3 +25,12 @@ it('can parse filenames', function () { expect($parsedFilename->getMovedFileName())->toBeNull(); }); + +it('can handles non-utf characters', function () { + $fileName = 'Образец_для_заполнения_85e16d7b-58ed-43bc-8dce-7d3ff7d69f41.png'; + $parsedFilename = \App\Service\Storage\StorageFileNameParser::parse($fileName); + expect($parsedFilename->fileName)->toBe('Образец_для_заполнения'); + expect($parsedFilename->uuid)->toBe('85e16d7b-58ed-43bc-8dce-7d3ff7d69f41'); + expect($parsedFilename->extension)->toBe('png'); + expect($parsedFilename->getMovedFileName())->toBe($fileName); +});