12
12
namespace Symfony \Component \DomCrawler ;
13
13
14
14
/**
15
- * Expand an URI according a current URI.
15
+ * The UriResolver class takes an URI (relative, absolute, fragment, etc.)
16
+ * and turns it into an absolute URI against another given base URI.
16
17
*
17
18
* @author Fabien Potencier <fabien@symfony.com>
18
19
* @author Grégoire Pineau <lyrixx@lyrixx.info>
19
20
*/
20
- class UriExpander
21
+ class UriResolver
21
22
{
22
23
/**
23
- * Expand an URI according to a current Uri .
24
+ * Resolves a URI according to a base URI .
24
25
*
25
- * For example if $uri=/foo/bar and $currentUri =https://symfony.com it will
26
+ * For example if $uri=/foo/bar and $baseUri =https://symfony.com it will
26
27
* return https://symfony.com/foo/bar
27
28
*
28
- * If the $uri is not absolute you must pass an absolute $currentUri
29
+ * If the $uri is not absolute you must pass an absolute $baseUri
29
30
*/
30
- public static function expand (string $ uri , ?string $ currentUri ): string
31
+ public static function resolve (string $ uri , ?string $ baseUri ): string
31
32
{
32
33
$ uri = trim ($ uri );
33
34
@@ -36,43 +37,43 @@ public static function expand(string $uri, ?string $currentUri): string
36
37
return $ uri ;
37
38
}
38
39
39
- if (null === $ currentUri ) {
40
+ if (null === $ baseUri ) {
40
41
throw new \InvalidArgumentException ('The URI is relative, so you must define its base URI passing an absolute URL. ' );
41
42
}
42
43
43
44
// empty URI
44
45
if (!$ uri ) {
45
- return $ currentUri ;
46
+ return $ baseUri ;
46
47
}
47
48
48
49
// an anchor
49
50
if ('# ' === $ uri [0 ]) {
50
- return self ::cleanupAnchor ($ currentUri ).$ uri ;
51
+ return self ::cleanupAnchor ($ baseUri ).$ uri ;
51
52
}
52
53
53
- $ baseUri = self ::cleanupUri ($ currentUri );
54
+ $ baseUriCleaned = self ::cleanupUri ($ baseUri );
54
55
55
56
if ('? ' === $ uri [0 ]) {
56
- return $ baseUri .$ uri ;
57
+ return $ baseUriCleaned .$ uri ;
57
58
}
58
59
59
60
// absolute URL with relative schema
60
61
if (0 === strpos ($ uri , '// ' )) {
61
- return preg_replace ('#^([^/]*)//.*$# ' , '$1 ' , $ baseUri ).$ uri ;
62
+ return preg_replace ('#^([^/]*)//.*$# ' , '$1 ' , $ baseUriCleaned ).$ uri ;
62
63
}
63
64
64
- $ baseUri = preg_replace ('#^(.*?//[^/]*)(?:\/.*)?$# ' , '$1 ' , $ baseUri );
65
+ $ baseUriCleaned = preg_replace ('#^(.*?//[^/]*)(?:\/.*)?$# ' , '$1 ' , $ baseUriCleaned );
65
66
66
67
// absolute path
67
68
if ('/ ' === $ uri [0 ]) {
68
- return $ baseUri .$ uri ;
69
+ return $ baseUriCleaned .$ uri ;
69
70
}
70
71
71
72
// relative path
72
- $ path = parse_url (substr ($ currentUri , \strlen ($ baseUri )), PHP_URL_PATH );
73
+ $ path = parse_url (substr ($ baseUri , \strlen ($ baseUriCleaned )), PHP_URL_PATH );
73
74
$ path = self ::canonicalizePath (substr ($ path , 0 , strrpos ($ path , '/ ' )).'/ ' .$ uri );
74
75
75
- return $ baseUri .('' === $ path || '/ ' !== $ path [0 ] ? '/ ' : '' ).$ path ;
76
+ return $ baseUriCleaned .('' === $ path || '/ ' !== $ path [0 ] ? '/ ' : '' ).$ path ;
76
77
}
77
78
78
79
/**
0 commit comments