From 5a32bd3f12e1b921ac147c3df51287a3e2421db4 Mon Sep 17 00:00:00 2001 From: Richard van Laak Date: Tue, 26 Nov 2019 18:01:15 +0100 Subject: [PATCH] fix #36 make `InitialMapper` multibyte proof --- composer.json | 3 ++- src/Mapper/InitialMapper.php | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/composer.json b/composer.json index c13fd59..8c39eba 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,8 @@ } ], "require": { - "php": ">=7.1" + "php": ">=7.1", + "ext-mbstring": "*" }, "require-dev": { "phpunit/phpunit": "^7.0", diff --git a/src/Mapper/InitialMapper.php b/src/Mapper/InitialMapper.php index 3a75dc4..2a83b34 100644 --- a/src/Mapper/InitialMapper.php +++ b/src/Mapper/InitialMapper.php @@ -43,10 +43,11 @@ public function map(array $parts): array if (strtoupper($part) === $part) { $stripped = str_replace('.', '', $part); - $length = strlen($stripped); + $length = mb_strlen($stripped); if (1 < $length && $length <= $this->combinedMax) { - array_splice($parts, $k, 1, str_split($stripped)); + $charactersAsArray = preg_split('//u', $stripped, null, PREG_SPLIT_NO_EMPTY); + array_splice($parts, $k, 1, $charactersAsArray); $last = count($parts) - 1; $part = $parts[$k]; } @@ -66,12 +67,12 @@ public function map(array $parts): array */ protected function isInitial(string $part): bool { - $length = strlen($part); + $length = mb_strlen($part); if (1 === $length) { return true; } - return ($length === 2 && substr($part, -1) === '.'); + return ($length === 2 && mb_substr($part, -1) === '.'); } }