Skip to content

Commit 5a5a4c8

Browse files
vlakofftaylorotwell
authored andcommitted
Fixes and optimizations for Str::after (#19428)
* Correct results if there are multibyte characters before the search * Do not trigger warning if search is an empty string Also, should be significantly faster.
1 parent 67de1d6 commit 5a5a4c8

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

src/Illuminate/Support/Str.php

+7-3
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,17 @@ class Str
3838
*/
3939
public static function after($subject, $search)
4040
{
41-
if (! static::contains($subject, $search)) {
41+
if ($search == '') {
4242
return $subject;
4343
}
4444

45-
$end = strpos($subject, $search) + static::length($search);
45+
$pos = strpos($subject, $search);
4646

47-
return static::substr($subject, $end, static::length($subject));
47+
if ($pos === false) {
48+
return $subject;
49+
}
50+
51+
return substr($subject, $pos + strlen($search));
4852
}
4953

5054
/**

tests/Support/SupportStrTest.php

+2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ public function testStrAfter()
8080
{
8181
$this->assertEquals('nah', Str::after('hannah', 'han'));
8282
$this->assertEquals('nah', Str::after('hannah', 'n'));
83+
$this->assertEquals('nah', Str::after('ééé hannah', 'han'));
8384
$this->assertEquals('hannah', Str::after('hannah', 'xxxx'));
85+
$this->assertEquals('hannah', Str::after('hannah', ''));
8486
}
8587

8688
public function testStrContains()

0 commit comments

Comments
 (0)