appwrite/src/Appwrite/URL/URL.php

109 lines
2.6 KiB
PHP
Raw Normal View History

2020-04-08 13:38:36 +00:00
<?php
namespace Appwrite\URL;
class URL
{
/**
* Parse URL
2020-06-24 21:05:16 +00:00
*
2020-04-08 13:38:36 +00:00
* Take a URL string and split it to array parts
2020-06-24 21:05:16 +00:00
*
2020-04-08 17:04:46 +00:00
* @param string $url
2020-06-24 21:05:16 +00:00
*
2020-04-08 13:38:36 +00:00
* @return array
*/
2021-10-09 17:51:21 +00:00
public static function parse(string $url): array
2020-04-08 13:38:36 +00:00
{
$default = [
'scheme' => '',
'pass' => '',
'user' => '',
'host' => '',
'port' => null,
'path' => '',
'query' => '',
'fragment' => '',
];
return \array_merge($default, \parse_url($url));
2020-04-08 13:38:36 +00:00
}
2021-10-09 17:51:21 +00:00
2020-04-08 13:38:36 +00:00
/**
* Un-Parse URL
2020-06-24 21:05:16 +00:00
*
2020-04-08 13:38:36 +00:00
* Take URL parts and combine them to a valid string
2020-06-24 21:05:16 +00:00
*
2020-04-08 17:04:46 +00:00
* @param array $url
* @param array $ommit
2020-06-24 21:05:16 +00:00
*
2020-04-08 13:38:36 +00:00
* @return string
*/
2021-10-09 17:51:21 +00:00
public static function unparse(array $url, array $ommit = []): string
2020-04-08 13:38:36 +00:00
{
if (isset($url['path']) && \mb_substr($url['path'], 0, 1) !== '/') {
2022-05-23 14:54:50 +00:00
$url['path'] = '/' . $url['path'];
2020-04-08 13:38:36 +00:00
}
2021-10-09 17:51:21 +00:00
2020-04-08 13:38:36 +00:00
$parts = [];
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
$parts['scheme'] = isset($url['scheme']) ? $url['scheme'] . '://' : '';
2021-10-09 17:51:21 +00:00
2020-04-08 13:38:36 +00:00
$parts['host'] = isset($url['host']) ? $url['host'] : '';
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
$parts['port'] = isset($url['port']) ? ':' . $url['port'] : '';
2021-10-09 17:51:21 +00:00
2020-04-08 13:38:36 +00:00
$parts['user'] = isset($url['user']) ? $url['user'] : '';
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
$parts['pass'] = isset($url['pass']) ? ':' . $url['pass'] : '';
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
$parts['pass'] = ($parts['user'] || $parts['pass']) ? $parts['pass'] . '@' : '';
2021-10-09 17:51:21 +00:00
2020-04-08 13:38:36 +00:00
$parts['path'] = isset($url['path']) ? $url['path'] : '';
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
$parts['query'] = isset($url['query']) && !empty($url['query']) ? '?' . $url['query'] : '';
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
$parts['fragment'] = isset($url['fragment']) ? '#' . $url['fragment'] : '';
2021-10-09 17:51:21 +00:00
2020-04-08 13:38:36 +00:00
if ($ommit) {
foreach ($ommit as $key) {
if (isset($parts[ $key ])) {
$parts[ $key ] = '';
}
}
}
2021-10-09 17:51:21 +00:00
2022-05-23 14:54:50 +00:00
return $parts['scheme'] . $parts['user'] . $parts['pass'] . $parts['host'] . $parts['port'] . $parts['path'] . $parts['query'] . $parts['fragment'];
2020-04-08 13:38:36 +00:00
}
2020-04-08 17:04:46 +00:00
/**
* Parse Query String
2020-06-24 21:05:16 +00:00
*
2020-04-08 17:04:46 +00:00
* Convert query string to array
2020-06-24 21:05:16 +00:00
*
2020-04-08 17:04:46 +00:00
* @param string $query
2020-06-24 21:05:16 +00:00
*
2020-04-08 17:04:46 +00:00
* @return array
*/
2021-10-09 17:51:21 +00:00
public static function parseQuery(string $query): array
2020-04-08 17:04:46 +00:00
{
\parse_str($query, $result);
2020-04-08 17:04:46 +00:00
return $result;
}
/**
* Un-Parse Query String
2020-06-24 21:05:16 +00:00
*
2020-04-08 17:04:46 +00:00
* Convert query string array to string
2020-06-24 21:05:16 +00:00
*
* @param array $query
2020-06-24 21:05:16 +00:00
*
* @return string
2020-04-08 17:04:46 +00:00
*/
2021-10-09 17:51:21 +00:00
public static function unparseQuery(array $query): string
2020-04-08 17:04:46 +00:00
{
return \http_build_query($query);
2020-04-08 17:04:46 +00:00
}
2020-06-24 21:05:16 +00:00
}