From d5d59acd649a4ad18c09946f12ce5c6ac0487d84 Mon Sep 17 00:00:00 2001 From: Demian Katz Date: Thu, 18 Jan 2024 08:15:09 -0500 Subject: [PATCH] Fix work key UTF-8 trimming bug. --- .../src/VuFind/XSLT/Import/VuFindWorkKeys.php | 2 +- .../XSLT/Import/VuFindWorkKeysTest.php | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/module/VuFind/src/VuFind/XSLT/Import/VuFindWorkKeys.php b/module/VuFind/src/VuFind/XSLT/Import/VuFindWorkKeys.php index d506f2a255f..b59215ccbda 100644 --- a/module/VuFind/src/VuFind/XSLT/Import/VuFindWorkKeys.php +++ b/module/VuFind/src/VuFind/XSLT/Import/VuFindWorkKeys.php @@ -179,6 +179,6 @@ protected static function normalize( if (!empty($excludeRegEx)) { $normalized = preg_replace($excludeRegEx, '', $normalized); } - return substr(strtolower($normalized), 0, 255); + return mb_substr(mb_strtolower($normalized, 'UTF-8'), 0, 255, 'UTF-8'); } } diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindWorkKeysTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindWorkKeysTest.php index 81d458973d4..eca096a0841 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindWorkKeysTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/XSLT/Import/VuFindWorkKeysTest.php @@ -96,6 +96,36 @@ public function testGetWorkKeysWithIncludeRegExAndDuplicateTitles() ); } + /** + * Test the work keys helper with a very long Greek title. + * + * @return void + */ + public function testGetWorkKeysWithLongGreekTitle() + { + $expected = '' + . "\nUT αυτοματοποίηση συστημάτων ηλεκτρικής ενέργειας: σχεδιασμός και προσομοίωση συστήματος " + . 'για τον εντοπισμό-απομόνωση σφαλμάτων γραμμής και την αποκατάσταση της ηλεκτροδότησης σε δίκτυα ' + . "διανομής μέσης τάσης με την εφαρμογή μεθόδων διανεμημένης τεχνητής νοημοσ\n" + . 'AT μπαξεβάνος, ιωάννης σ. αυτοματοποίηση συστημάτων ηλεκτρικής ενέργειας: σχεδιασμός και ' + . 'προσομοίωση συστήματος για τον εντοπισμό-απομόνωση σφαλμάτων γραμμής και την αποκατάσταση της ' + . 'ηλεκτροδότησης σε δίκτυα διανομής μέσης τάσης με την εφαρμογή μεθόδων διανεμημένης τεχνητής ' + . "νοημοσ\n"; + $title = 'Αυτοματοποίηση συστημάτων ηλεκτρικής ενέργειας: σχεδιασμός και προσομοίωση συστήματος για τον ' + . 'εντοπισμό-απομόνωση σφαλμάτων γραμμής και την αποκατάσταση της ηλεκτροδότησης σε δίκτυα διανομής ' + . 'μέσης τάσης με την εφαρμογή μεθόδων διανεμημένης τεχνητής νοημοσύνης'; + $result = VuFindWorkKeys::getWorkKeys( + $title, + [$title], + [$title], + ['Μπαξεβάνος, Ιωάννης Σ.'] + ); + $this->assertEquals( + $expected, + simplexml_import_dom($result)->asXml() + ); + } + /** * Test the work keys helper with an exclude regex. *