]>
Commit | Line | Data |
---|---|---|
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 | ||
28 | /** | |
29 | * Removes undesired query parameters and fragments | |
30 | * | |
31 | * @param string url UrlUtils to be cleaned | |
32 | * | |
33 | * @return string the string representation of this URL after cleanup | |
34 | */ | |
35 | function cleanup_url($url) | |
36 | { | |
37 | $obj_url = new \Shaarli\Http\Url($url); | |
38 | return $obj_url->cleanup(); | |
39 | } | |
40 | ||
41 | /** | |
42 | * Get URL scheme. | |
43 | * | |
44 | * @param string url UrlUtils for which the scheme is requested | |
45 | * | |
46 | * @return mixed the URL scheme or false if none is provided. | |
47 | */ | |
48 | function get_url_scheme($url) | |
49 | { | |
50 | $obj_url = new \Shaarli\Http\Url($url); | |
51 | return $obj_url->getScheme(); | |
52 | } | |
53 | ||
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 | ||
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); | |
84 | } elseif ($protocol !== 1) { | |
85 | $url = 'http://' . $url; | |
86 | } | |
87 | return $url; | |
88 | } |