]>
Commit | Line | Data |
---|---|---|
d9d776af V |
1 | <?php |
2 | /** | |
3 | * Converts an array-represented URL to a string | |
4 | * | |
5 | * Source: http://php.net/manual/en/function.parse-url.php#106731 | |
6 | * | |
7 | * @see http://php.net/manual/en/function.parse-url.php | |
8 | * | |
9 | * @param array $parsedUrl an array-represented URL | |
10 | * | |
11 | * @return string the string representation of the URL | |
12 | */ | |
13 | function unparse_url($parsedUrl) | |
14 | { | |
15 | $scheme = isset($parsedUrl['scheme']) ? $parsedUrl['scheme'].'://' : ''; | |
16 | $host = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; | |
17 | $port = isset($parsedUrl['port']) ? ':'.$parsedUrl['port'] : ''; | |
18 | $user = isset($parsedUrl['user']) ? $parsedUrl['user'] : ''; | |
19 | $pass = isset($parsedUrl['pass']) ? ':'.$parsedUrl['pass'] : ''; | |
20 | $pass = ($user || $pass) ? "$pass@" : ''; | |
21 | $path = isset($parsedUrl['path']) ? $parsedUrl['path'] : ''; | |
22 | $query = isset($parsedUrl['query']) ? '?'.$parsedUrl['query'] : ''; | |
23 | $fragment = isset($parsedUrl['fragment']) ? '#'.$parsedUrl['fragment'] : ''; | |
24 | ||
25 | return "$scheme$user$pass$host$port$path$query$fragment"; | |
26 | } | |
27 | ||
ef591e7e GV |
28 | /** |
29 | * Removes undesired query parameters and fragments | |
30 | * | |
51753e40 | 31 | * @param string url UrlUtils to be cleaned |
ef591e7e GV |
32 | * |
33 | * @return string the string representation of this URL after cleanup | |
34 | */ | |
35 | function cleanup_url($url) | |
36 | { | |
fb1b182f | 37 | $obj_url = new \Shaarli\Http\Url($url); |
f211e417 | 38 | return $obj_url->cleanup(); |
ef591e7e GV |
39 | } |
40 | ||
41 | /** | |
42 | * Get URL scheme. | |
43 | * | |
51753e40 | 44 | * @param string url UrlUtils for which the scheme is requested |
ef591e7e GV |
45 | * |
46 | * @return mixed the URL scheme or false if none is provided. | |
47 | */ | |
48 | function get_url_scheme($url) | |
49 | { | |
fb1b182f | 50 | $obj_url = new \Shaarli\Http\Url($url); |
f211e417 | 51 | return $obj_url->getScheme(); |
ef591e7e GV |
52 | } |
53 | ||
938d9cce A |
54 | /** |
55 | * Adds a trailing slash at the end of URL if necessary. | |
56 | * | |
57 | * @param string $url URL to check/edit. | |
58 | * | |
59 | * @return string $url URL with a end trailing slash. | |
60 | */ | |
61 | function add_trailing_slash($url) | |
62 | { | |
63 | return $url . (!endsWith($url, '/') ? '/' : ''); | |
64 | } | |
65 | ||
86ceea05 A |
66 | /** |
67 | * Replace not whitelisted protocols by 'http://' from given URL. | |
68 | * | |
69 | * @param string $url URL to clean | |
70 | * @param array $protocols List of allowed protocols (aside from http(s)). | |
71 | * | |
72 | * @return string URL with allowed protocol | |
73 | */ | |
74 | function whitelist_protocols($url, $protocols) | |
75 | { | |
76 | if (startsWith($url, '?') || startsWith($url, '/')) { | |
77 | return $url; | |
78 | } | |
79 | $protocols = array_merge(['http', 'https'], $protocols); | |
80 | $protocol = preg_match('#^(\w+):/?/?#', $url, $match); | |
81 | // Protocol not allowed: we remove it and replace it with http | |
82 | if ($protocol === 1 && ! in_array($match[1], $protocols)) { | |
83 | $url = str_replace($match[0], 'http://', $url); | |
d2d4f993 | 84 | } elseif ($protocol !== 1) { |
86ceea05 A |
85 | $url = 'http://' . $url; |
86 | } | |
87 | return $url; | |
88 | } |