diff --git a/src/Query/Builder.php b/src/Query/Builder.php index da08163883..e6c1511e83 100644 --- a/src/Query/Builder.php +++ b/src/Query/Builder.php @@ -805,7 +805,7 @@ protected function filterTestLike($item, $like) $pattern = Pattern::sqlLikeToRegex($like); - return preg_match('/'.$pattern.'/im', (string) $item); + return preg_match('/'.$pattern.'/imu', (string) $item); } protected function filterTestNotLike($item, $like) @@ -815,7 +815,7 @@ protected function filterTestNotLike($item, $like) protected function filterTestLikeRegex($item, $pattern) { - return preg_match("/{$pattern}/im", (string) $item); + return preg_match("/{$pattern}/imu", (string) $item); } protected function filterTestNotLikeRegex($item, $pattern) diff --git a/src/Query/EloquentQueryBuilder.php b/src/Query/EloquentQueryBuilder.php index 617d74b452..a4bc452a23 100644 --- a/src/Query/EloquentQueryBuilder.php +++ b/src/Query/EloquentQueryBuilder.php @@ -175,7 +175,7 @@ public function where($column, $operator = null, $value = null, $boolean = 'and' if ($operator !== null && strtolower($operator) == 'like') { $grammar = $this->builder->getConnection()->getQueryGrammar(); - $this->builder->whereRaw('LOWER('.$grammar->wrap($this->column($column)).') LIKE ?', strtolower($value), $boolean); + $this->builder->whereRaw('LOWER('.$grammar->wrap($this->column($column)).') LIKE ?', mb_strtolower($value), $boolean); return $this; } diff --git a/tests/Data/Entries/EntryQueryBuilderTest.php b/tests/Data/Entries/EntryQueryBuilderTest.php index dcb83ee36d..67f7168413 100644 --- a/tests/Data/Entries/EntryQueryBuilderTest.php +++ b/tests/Data/Entries/EntryQueryBuilderTest.php @@ -967,6 +967,9 @@ public function entries_are_found_using_like($like, $expected) '/ test', 'test /', 'test / test', + 'Über dem Meer', + 'über dem meer', + 'Ärger', ])->each(function ($val, $i) { EntryFactory::id($i) ->slug('post-'.$i) @@ -999,6 +1002,10 @@ public static function likeProvider() '%/' => ['/', 'test /'], '/%' => ['/', '/ test'], '%/%' => ['/', '/ test', 'test /', 'test / test'], + '%über%' => ['Über dem Meer', 'über dem meer'], + '%Über%' => ['Über dem Meer', 'über dem meer'], + '%ärger%' => ['Ärger'], + '%Ärger%' => ['Ärger'], ])->mapWithKeys(function ($expected, $like) { return [$like => [$like, $expected]]; });