Skip to content

Commit b490d6d

Browse files
edalzellclaudejasonvarga
authored
[6.x] Ability to add to the filename replacements list (#14316)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent d7fb077 commit b490d6d

3 files changed

Lines changed: 36 additions & 3 deletions

File tree

config/assets.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,19 @@
207207

208208
'additional_uploadable_extensions' => [],
209209

210+
/*
211+
|--------------------------------------------------------------------------
212+
| Additional Filename Character Replacements
213+
|--------------------------------------------------------------------------
214+
|
215+
| When uploading files, certain characters in filenames will be replaced
216+
| to ensure a safe filename. You may configure additional replacements.
217+
| These are in addition to the native ones. They are not overridable.
218+
|
219+
*/
220+
221+
'additional_filename_replacements' => [],
222+
210223
/*
211224
|--------------------------------------------------------------------------
212225
| SVG Sanitization

src/Assets/AssetUploader.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ protected function getNewExtension()
8080

8181
public static function getSafeFilename($string)
8282
{
83-
$replacements = [
83+
$replacements = array_merge(config('statamic.assets.additional_filename_replacements', []), [
8484
' ' => '-',
8585
'#' => '-',
8686
':' => '-',
@@ -95,7 +95,7 @@ public static function getSafeFilename($string)
9595
'%' => '-',
9696
"'" => '-',
9797
'--' => '-',
98-
];
98+
]);
9999

100100
return (string) Str::of(urldecode($string))
101101
->replace(array_keys($replacements), array_values($replacements))

tests/Assets/AssetUploaderTest.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ class AssetUploaderTest extends TestCase
1111
{
1212
#[Test]
1313
#[DataProvider('filenameReplacementsProvider')]
14-
public function it_gets_safe_filename($originalFilename, $expectedFilename)
14+
public function it_gets_safe_filename($originalFilename, $expectedFilename, $config = [])
1515
{
16+
config(['statamic.assets.additional_filename_replacements' => $config]);
1617
$this->assertEquals($expectedFilename, AssetUploader::getSafeFilename($originalFilename));
1718
}
1819

@@ -34,6 +35,25 @@ public static function filenameReplacementsProvider()
3435
'single quote' => ["one'two'three.jpg", 'one-two-three.jpg'],
3536
'double dash' => ['one--two--three.jpg', 'one-two-three.jpg'],
3637
'ascii' => ['fòô-bàř', 'foo-bar'],
38+
'additional config' => [
39+
'one,two(6)',
40+
'onetwo6',
41+
[
42+
',' => '',
43+
'(' => '',
44+
')' => '',
45+
],
46+
],
47+
'additional config does not override native replacements' => [
48+
'one,two%three-(6)',
49+
'onetwo-three-6',
50+
[
51+
',' => '',
52+
'(' => '',
53+
')' => '',
54+
'%' => '_',
55+
],
56+
],
3757
];
3858
}
3959
}

0 commit comments

Comments
 (0)