diff --git a/.changelog/current/2346-utf-file-names-allow-abbreviation.md b/.changelog/current/2346-utf-file-names-allow-abbreviation.md new file mode 100644 index 000000000..4069cff95 --- /dev/null +++ b/.changelog/current/2346-utf-file-names-allow-abbreviation.md @@ -0,0 +1,3 @@ +# Fixed + +- Fix abbreviation of long file names even with UTF chars diff --git a/lib/Helper/FileSystem/RecipeNameHelper.php b/lib/Helper/FileSystem/RecipeNameHelper.php index c34c021dc..fb48612b8 100644 --- a/lib/Helper/FileSystem/RecipeNameHelper.php +++ b/lib/Helper/FileSystem/RecipeNameHelper.php @@ -15,6 +15,9 @@ class RecipeNameHelper { /** @var LoggerInterface */ private $logger; + /** @var int */ + protected const MAX_LEN = 100; + public function __construct( IL10N $l, LoggerInterface $logger @@ -35,8 +38,8 @@ public function getFolderName(string $recipeName): string { $pattern = '/[\\/:?!"\\\\\'|&^#]/'; $recipeName = preg_replace($pattern, '_', $recipeName); - if (strlen($recipeName) > 100) { - $recipeName = substr($recipeName, 0, 97) . '___'; + if (mb_strlen($recipeName) > self::MAX_LEN) { + $recipeName = mb_substr($recipeName, 0, self::MAX_LEN - 3) . '___'; } return $recipeName; diff --git a/tests/Unit/Helper/FileSystem/RecipeNameHelperTest.php b/tests/Unit/Helper/FileSystem/RecipeNameHelperTest.php index b3dc9b216..ae2a2f8d2 100644 --- a/tests/Unit/Helper/FileSystem/RecipeNameHelperTest.php +++ b/tests/Unit/Helper/FileSystem/RecipeNameHelperTest.php @@ -8,7 +8,7 @@ use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; -class RecipeNameHelperFilter extends TestCase { +class RecipeNameHelperTest extends TestCase { /** @var RecipeNameHelper */ private $dut; @@ -34,6 +34,7 @@ public function dpGetFolderName() { '102 chars' => ["{$ninetyChars}123456789012", "{$ninetyChars}1234567___"], '105 chars' => ["{$ninetyChars}123456789012345", "{$ninetyChars}1234567___"], 'special chars' => ['a/b:c?d!e"f|g\\h\'i^j&k#l', 'a_b_c_d_e_f_g_h_i_j_k_l'], + 'greek chars' => ["Τραγανή granola χωρίς ζάχαρη με ό,τι ξηρούς καρπούς & αποξηραμένα φρούτα έχεις στο ντουλάπι σου", "Τραγανή granola χωρίς ζάχαρη με ό,τι ξηρούς καρπούς _ αποξηραμένα φρούτα έχεις στο ντουλάπι σου"], ]; }