From 1f7f12db7e608b695e962434addc06c95f1ae816 Mon Sep 17 00:00:00 2001 From: Manuel Date: Wed, 26 Mar 2025 15:10:57 +0100 Subject: [PATCH 1/3] Fix: Better detection of charset of .csv file --- packages/actions/src/Concerns/CanImportRecords.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/actions/src/Concerns/CanImportRecords.php b/packages/actions/src/Concerns/CanImportRecords.php index b828847b64..824246c8e9 100644 --- a/packages/actions/src/Concerns/CanImportRecords.php +++ b/packages/actions/src/Concerns/CanImportRecords.php @@ -439,7 +439,8 @@ trait CanImportRecords protected function detectCsvEncoding(mixed $resource): ?string { - $fileHeader = fgets($resource); + rewind($resource); + $contentSample = fread($resource, 8192); // The encoding of a subset should be declared before the encoding of its superset. $encodings = [ @@ -454,7 +455,7 @@ trait CanImportRecords ]; foreach ($encodings as $encoding) { - if (! mb_check_encoding($fileHeader, $encoding)) { + if (! mb_check_encoding($contentSample, $encoding)) { continue; } From 7a25b389604333a6fa1858b83ae078aa647d3764 Mon Sep 17 00:00:00 2001 From: Manuel Date: Thu, 27 Mar 2025 09:58:40 +0100 Subject: [PATCH 2/3] get the first 20 lines of a CSV to detect the encoding --- packages/actions/src/Concerns/CanImportRecords.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/actions/src/Concerns/CanImportRecords.php b/packages/actions/src/Concerns/CanImportRecords.php index 824246c8e9..6953516eb7 100644 --- a/packages/actions/src/Concerns/CanImportRecords.php +++ b/packages/actions/src/Concerns/CanImportRecords.php @@ -440,7 +440,18 @@ trait CanImportRecords protected function detectCsvEncoding(mixed $resource): ?string { rewind($resource); - $contentSample = fread($resource, 8192); + + $lineCount = 0; + $contentSample = ''; + + while (!feof($resource) && $lineCount < 20) { + $line = fgets($resource); + if ($line === false) { + break; + } + $contentSample .= $line; + $lineCount++; + } // The encoding of a subset should be declared before the encoding of its superset. $encodings = [ From 421b79bfb092bcad014b1f1ada4984a693960845 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Wed, 2 Apr 2025 08:38:47 +0100 Subject: [PATCH 3/3] Update CanImportRecords.php --- packages/actions/src/Concerns/CanImportRecords.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/actions/src/Concerns/CanImportRecords.php b/packages/actions/src/Concerns/CanImportRecords.php index 6953516eb7..4938e5d5c2 100644 --- a/packages/actions/src/Concerns/CanImportRecords.php +++ b/packages/actions/src/Concerns/CanImportRecords.php @@ -444,11 +444,13 @@ trait CanImportRecords $lineCount = 0; $contentSample = ''; - while (!feof($resource) && $lineCount < 20) { + while ((! feof($resource)) && ($lineCount < 20)) { $line = fgets($resource); + if ($line === false) { break; } + $contentSample .= $line; $lineCount++; }