Upstream thephpleague/uri-src state of the touched files before 3ad4f269f2

This commit is contained in:
upstream committed 2026-09-06 06:07:07 +02:00
1 parent 2f4f2d71c4
commit 0a2c361a43
2 files changed
+2 -18

No files matched your search

+2 -4
View File
@@ -19,10 +19,10 @@ use Stringable;
use function implode;
use function is_array;
use function mb_substr;
use function preg_match;
use function rawurlencode;
use function str_contains;
use function substr;
/**
* Processing behavior according to the expression type operator.
@@ -156,9 +156,7 @@ enum Operator: string
}
if (':' === $varSpec->modifier) {
// RFC 6570 Section 2.4.1: the prefix length is a count of characters, not octets,
// so a multibyte-aware truncation is required to avoid splitting a UTF-8 character.
$value = mb_substr($value, 0, $varSpec->position, 'UTF-8');
$value = substr($value, 0, $varSpec->position);
}
return [$this->decode($value), $this->isNamed()];
-14
View File
@@ -261,20 +261,6 @@ final class UriTemplateTest extends TestCase
self::assertSame($expectedUri, $uriTemplate->expandToUrlOrFail($variables)->toAsciiString());
}
public function testPrefixModifierTruncatesByCharacterNotByte(): void
{
// RFC 6570 Section 2.4.1: the prefix length counts characters, not octets, so a
// multibyte character must never be split. The euro sign and the musical G-clef
// are 3 and 4 bytes in UTF-8, respectively, but each is a single character.
$uriTemplate = new UriTemplate('{?currency:1}{clef:1}');
$variables = [
'currency' => "\u{20AC}uro",
'clef' => "\u{1D11E}stave",
];
self::assertSame('?currency=%E2%82%AC%F0%9D%84%9E', $uriTemplate->expand($variables)->toString());
}
public function testDisallowNestedArrayExpansion(): void
{
$template = 'http://example.com{?query,data*,foo*}';