diff --git a/src/Extensions/TextExtension.php b/src/Extensions/TextExtension.php index 6866168..38c18c2 100644 --- a/src/Extensions/TextExtension.php +++ b/src/Extensions/TextExtension.php @@ -85,7 +85,15 @@ public function words(int $words = 3): string $words = $this->wordsAsArray($words); // Remove any uppercase / comma / dots - return strtolower(preg_replace('/[.,]/', '', implode(' ', $words))); + $words = preg_replace('/[.,]/', '', implode(' ', $words)); + + if (function_exists('mb_strtolower')) { + return mb_strtolower($words); + } + + trigger_error('You do not have the `mbstring` extension enabled; FakerPHP might not handle uncommon characters correctly.', E_USER_WARNING); + + return strtolower($words); } public function sentencesAsArray(int $sentences = 3): array diff --git a/tests/Unit/Extensions/TextExtensionTest.php b/tests/Unit/Extensions/TextExtensionTest.php index 4af2fc2..e1b0c37 100644 --- a/tests/Unit/Extensions/TextExtensionTest.php +++ b/tests/Unit/Extensions/TextExtensionTest.php @@ -30,6 +30,14 @@ public function testWordsWithDefaultValue(): void } } + public function testWordsLowercasesNonAsciiCharacters(): void + { + $extension = new \Xefi\Faker\Extensions\TextExtension(new \Random\Randomizer()); + (new ReflectionClass($extension))->getProperty('paragraphs')->setValue($extension, [[['Ёлка', 'Écrit', 'Über.']]]); + + $this->assertEqualsCanonicalizing(['ёлка', 'écrit', 'über'], explode(' ', $extension->words(3))); + } + public static function wordsProvider() { return [