This is ada_url, a fast standard-compliant PHP library for working with URLs based on the Ada URL parser.
To use this library in your project, you can clone the repository and build the extension manually:
git clone https://github.com/lnear-dev/ada-url
cd ada-url
phpize
./configure
make
make install
Or install a specific version from release
:
wget "https://github.com/lnear-dev/ada-url/archive/refs/tags/1.0.0.tar.gz"
tar -xvf 1.0.0.tar.gz
cd ada-url-1.0.0
phpize
./configure
make
make install
Then, add the following line to your php.ini
file:
extension=ada_url.so
Represents the type of host in a URL.
DEFAULT
= 0IPV4
= 1IPV6
= 2
Represents the scheme type of a URL.
HTTP
= 0NOT_SPECIAL
= 1HTTPS
= 2WS
= 3FTP
= 4WSS
= 5FILE
= 6
Parses a URL and returns a URL
object or null
.
Example:
$url = "https://example.com/path/to/resource";
$parsedUrl = AdaURL\URL::parse($url);
if ($parsedUrl) {
echo "Protocol: " . $parsedUrl->getProtocol() . "\n";
echo "Host: " . $parsedUrl->getHost() . "\n";
}
Parses a URL with a base URL and returns a URL
object or null
.
Example:
$url = "/path/to/resource";
$base = "https://example.com";
$parsedUrl = AdaURL\URL::parseWithBase($url, $base);
if ($parsedUrl) {
echo "Full URL: " . $parsedUrl->getHref() . "\n";
}
Converts a domain name to its Unicode representation.
Example:
$input = "xn--fsqu00a.xn--fsqu00a";
$unicodeDomain = AdaURL\URL::idnaToUnicode($input);
echo "Unicode Domain: " . $unicodeDomain . "\n";
Represents a URL and provides methods for manipulation.
Example:
$url = AdaURL\URL::parse("https://example.com/path/to/resource");
echo "Protocol: " . $url->getProtocol() . "\n";
echo "Hostname: " . $url->getHostname() . "\n";
echo "Path: " . $url->getPathname() . "\n";
Provides methods to work with URL search parameters.
Example:
$searchParams = new AdaURL\URLSearchParams();
$searchParams->append("key", "value1");
$searchParams->append("key", "value2");
echo "Keys: " . implode(", ", $searchParams->keys()) . "\n";
echo "Values for 'key': " . implode(", ", $searchParams->getAll("key")) . "\n";
namespace AdaURL;
enum HostType : int {
case DEFAULT = 0;
case IPV4 = 1;
case IPV6 = 2;
}
enum SchemeType : int {
case HTTP = 0;
case NOT_SPECIAL = 1;
case HTTPS = 2;
case WS = 3;
case FTP = 4;
case WSS = 5;
case FILE = 6;
}
class URLSearchParams implements \ArrayAccess, \Countable {
public function __construct(string $init = "") {}
public function __toString(): string {}
public final function get(string $key): ?string {}
public final function getAll(string $key): array {}
public final function has(string $key): bool {}
public final function append(string $key, string $value): void {}
public final function set(string $key, string $value): void {}
public final function sort(): void {}
public final function delete(string $key): void {}
public final function keys(): array {}
public final function values(): array {}
public final function entries(): array {}
public function offsetExists(mixed $offset): bool {}
public function offsetGet(mixed $offset): mixed {}
public function offsetSet(mixed $offset, mixed $value): void {}
public function offsetUnset(mixed $offset): void {}
public function count(): int {}
}
class URL {
public function __construct(string $url = "", ?string $base = null) {}
public function __toString(): string {}
public final function hasCredentials(): bool {}
public final function hasEmptyHostname(): bool {}
public final function hasHostname(): bool {}
public final function hasNonEmptyUsername(): bool {}
public final function hasNonEmptyPassword(): bool {}
public final function hasPort(): bool {}
public final function hasPassword(): bool {}
public final function hasHash(): bool {}
public final function hasSearch(): bool {}
public final function getHref(): string {}
public final function getProtocol(): string {}
public final function getUsername(): string {}
public final function getPassword(): string {}
public final function getHost(): string {}
public final function getHostname(): string {}
public final function getPort(): string {}
public final function getPathname(): string {}
public final function getSearch(): string {}
public final function getHash(): string {}
public final function getOrigin(): string {}
public final function getHostType(): HostType {}
public final function getSchemeType(): SchemeType {}
public final function setHref(string $url): bool {}
public final function setProtocol(string $protocol): bool {}
public final function setUsername(string $username): bool {}
public final function setPassword(string $password): bool {}
public final function setHost(string $host): bool {}
public final function setHostname(string $hostname): bool {}
public final function setPort(string $port): bool {}
public final function setPathname(string $pathname): bool {}
public final function setSearch(string $search): void {}
public final function setHash(string $hash): void {}
public final function setSearchParams(URLSearchParams $searchParams): void {}
public final function clearPort(): void {}
public final function clearHash(): void {}
public final function clearSearch(): void {}
public static function parse(string $url, ?string $base = null): ?URL {}
public static function parseWithBase(string $url, string $base): ?URL {}
public static function canParse(string $url): bool {}
public static function canParseWithBase(string $url, string $base): bool {}
public static function idnaToUnicode(string $input): string {}
public static function idnaToAscii(string $input): string {}
}
This library is licensed under the MIT License. See LICENSE for details.