Biblioteca de PHP para acceder a la información de una URL.
Proporciona un reemplazo mejorado para el acceso a los componentes de una URL que ofrecen las
funciones parse_url
y pathinfo
de PHP.
Esta biblioteca no formatea la URL proporcionada, sólo facilita el acceso a los componentes.
Para algo más avanzado puede usar algo como league/uri-components
.
- Requisitos
- Instalación
- Clases disponibles
- Uso
- Tests
- Tareas pendientes
- Registro de Cambios
- Contribuir
- Patrocinar
- Licencia
-
Sistema operativo: Linux | Windows.
-
Versiones de PHP: 8.1 | 8.2.
La mejor forma de instalarla es a través de Composer.
Para instalar PHP URL library, simplemente escribe:
composer require josantonius/url
El comando anterior sólo instalará los archivos necesarios, si prefieres descargar todo el código fuente puedes utilizar:
composer require josantonius/url --prefer-source
También puedes clonar el repositorio completo con Git:
git clone https://github.com/josantonius/php-url.git
Josantonius\Url\Url
Crear una nueva instancia:
/**
* Si no se proporciona ninguna URL, se generará la URL de la página actual.
*
* La URL generada excluirá los puertos 80 y 443 e incluirá el resto.
*
* @throws UrlException si la URL no es válida.
*/
public function __construct(null|string $url = null);
Obtiene la autoridad:
/**
* Autoridad en formato "[user-info@][host][:port]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $authority;
Obtiene la URL base:
/**
* URL base, en formato "[scheme:][//domain][:port]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $base;
Obtiene el nombre base de la ruta:
/**
* El nombre base de la ruta en formato "[filename][.extension]".
*
* @var string Nombre base de la ruta o cadena vacía.
*/
public readonly string $basename;
Obtiene el nombre del directorio de la ruta:
/**
* Nombre del directorio de la ruta, en formato "[dirname]".
*
* @var string Nombre del directorio de la ruta o cadena vacía.
*/
public readonly string $dirname;
Obtiene la extensión del nombre base de la ruta:
/**
* La extensión del nombre base de la ruta en formato "[extension]".
*
* @var string Extensión del nombre base de la ruta o cadena vacía.
*/
public readonly string $extension;
Obtiene el nombre del archivo de la ruta:
/**
* Nombre del archivo de la ruta en formato "[nombre de archivo]".
*
* @var string Nombre del archivo de la ruta o cadena vacía.
*/
public readonly string $filename;
Obtiene el fragmento:
/**
* Fragmento en formato "[fragment]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $fragment;
Obtiene la URL completa:
public readonly string $full;
Obtiene el fragmento con hash:
/**
* Fragmento con hash en formato "[#fragment]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $hash;
Obtiene el dominio:
/**
* Dominio en formato "[subdomain.][domain][.tld]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $host;
Obtiene la ruta:
/**
* Ruta en formato "[path]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $path;
Obtiene los parámetros de la consulta:
/**
* Parámetros de la consulta en formato array.
*
* @var array<string, mixed> Parámetros de la consulta o cadena vacía.
*/
public readonly array $parameters;
Obtiene la contraseña:
/**
* Contraseña en formato "[password]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $password;
Obtiene el puerto:
/**
* Puerto en formato "[port]".
*
* @var string The port as an integer or empty string if it does not exist.
*/
public readonly int|string $port;
Obtiene el esquema:
/**
* Esquema en formato "[scheme]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $scheme;
Obtiene los segmentos de la ruta:
/**
* Segmentos de la ruta URL en formato array.
*
* @var string[] Segmentos de la ruta URL o cadena vacía.
*/
public readonly array $segments;
Obtiene la consulta:
/**
* Consulta en formato "[query]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $query;
Obtiene la información de usuario:
/**
* Información de usuario en formato "[username][:password]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $userInfo;
Obtiene el nombre de usuario:
/**
* Nombre de usuario en formato "[username]".
*
* @var string Elemento o cadena vacía.
*/
public readonly string $username;
Ejemplo de uso de esta biblioteca:
use Josantonius\Url\Url;
$url = new Url();
use Josantonius\Url\Url;
$url = new Url('https://domain.com');
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com
$url->authority; // "domain.com"
$url = new Url('https://user:[email protected]:90/en/');
$url->authority; // "user:[email protected]:90"
$url = new Url('https://user:[email protected]/en/');
$url->authority; // "user:[email protected]"
$url = new Url('https://sub.domain.com/en/');
$url->authority; // "sub.domain.com"
use Josantonius\Url\Url;
$url = new Url(); // https://user:[email protected]:80/en/
$url->base; // "https://domain.com"
$url = new Url('https://domain.com:80/?tag=bug');
$url->base; // "https://domain.com:80"
$url = new Url('https://domain.com/en/');
$url->base; // "https://domain.com"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com/search.php
$url->basename; // "search.php"
$url = new Url('https://domain.com/en/web/docs/search.php?tag=bug');
$url->basename; // "search.php"
$url = new Url('https://domain.com/en/web/docs?tag=bug');
$url->basename; // "docs"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com/search.php
$url->dirname; // "/"
$url = new Url('https://domain.com/en/web/docs/search.php?tag=bug');
$url->dirname; // "/en/web/docs"
$url = new Url('https://domain.com/en/web/docs?tag=bug');
$url->dirname; // "/en/web"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com/search.php
$url->extension; // "php"
$url = new Url('https://domain.com/en/web/docs/search.php?tag=bug');
$url->extension; // "php"
$url = new Url('https://domain.com/en/web/docs?tag=bug');
$url->extension; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com/search.php
$url->filename; // "search"
$url = new Url('https://domain.com/en/web/docs/search.php?tag=bug');
$url->filename; // "search"
$url = new Url('https://domain.com/docs?tag=bug');
$url->filename; // "docs"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com#top
$url->fragment; // "top"
$url = new Url('https://domain.com/en/web/docs#top');
$url->fragment; // "top"
$url = new Url('https://domain.com');
$url->fragment; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com:80
$url->full; // "https://domain.com"
$url = new Url('https://user:[email protected]:90/en/');
$url->full; // "https://user:[email protected]:90/en/"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com#top
$url->hash; // "#top"
$url = new Url('https://domain.com/en/web/docs#top');
$url->hash; // "#top"
$url = new Url('https://domain.com');
$url->hash; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://sub.domain.com
$url->host; // "sub.domain.com"
$url = new Url('https://sub.domain.com/en/web/docs#top');
$url->host; // "sub.domain.com"
$url = new Url('https://domain.com');
$url->host; // "domain.com"
$url = new Url('https://localhost');
$url->host; // "localhost"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com/en
$url->path; // "/en/web/docs/search.php"
$url = new Url('https://domain.com/en/web/docs/search.php');
$url->path; // "/en/web/docs/search.php"
$url = new Url('https://domain.com/en/web/docs/');
$url->path; // "/en/web/docs/"
$url = new Url('https://domain.com/en?tag=bug');
$url->path; // "/en"
$url = new Url('https://domain.com?tag=bug');
$url->path; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com/en?tag=bug&order=asc#top
$url->parameters; // ["tag" => "bug", "order" => "asc"]
$url = new Url('https://domain.com/en/web/docs/search.php');
$url->parameters; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://:[email protected]
$url->password; // "pass"
$url = new Url('https://user:[email protected]');
$url->password; // "pass"
$url = new Url('https://[email protected]');
$url->password; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com:90
$url->port; // 90
$url = new Url(); // https://domain.com:80
$url->port; // ""
$url = new Url(); // https://domain.com:443
$url->port; // ""
$url = new Url('https://domain.com:80/en/');
$url->port; // 80
$url = new Url('https://domain.com:443/en/');
$url->port; // 443
$url = new Url('https://domain.com/en/');
$url->port; // ""
use Josantonius\Url\Url;
$url = new Url(); // http://domain.com
$url->scheme; // "http"
$url = new Url('https://domain.com');
$url->scheme; // "https"
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com?tag=bug
$url->segments; // []
$url = new Url('https://domain.com/en/web/docs/search.php');
$url->segments; // ['en', 'web', 'docs', 'search.php']
use Josantonius\Url\Url;
$url = new Url(); // https://domain.com?tag=bug
$url->query; // "tag=bug"
$url = new Url('https://domain.com?tag=bug&order=asc#top');
$url->query; // "tag=bug&order=asc"
$url = new Url('https://domain.com');
$url->query; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://[email protected]
$url->userInfo; // "user"
$url = new Url('https://:[email protected]');
$url->userInfo; // ":pass"
$url = new Url('https://user:[email protected]');
$url->userInfo; // "user:pass"
$url = new Url('https://domain.com');
$url->userInfo; // ""
use Josantonius\Url\Url;
$url = new Url(); // https://[email protected]
$url->username; // "user"
$url = new Url('https://:[email protected]');
$url->username; // ""
$url = new Url('https://user:[email protected]');
$url->username; // "user"
$url = new Url('https://domain.com');
$url->username; // ""
Para ejecutar las pruebas necesitarás Composer y seguir los siguientes pasos:
git clone https://github.com/josantonius/php-url.git
cd php-url
composer install
Ejecutar pruebas unitarias con PHPUnit:
composer phpunit
Ejecutar pruebas de estándares de código con PHPCS:
composer tests
Ejecutar pruebas con PHP Mess Detector para detectar inconsistencias en el estilo de codificación:
composer phpmd
Ejecutar todas las pruebas anteriores:
composer tests
- Añadir nueva funcionalidad
- Mejorar pruebas
- Mejorar documentación
- Mejorar la traducción al inglés en el archivo README
- Refactorizar código para las reglas de estilo de código deshabilitadas (ver phpmd.xml y phpcs.xml)
Los cambios detallados de cada versión se documentan en las notas de la misma.
Por favor, asegúrate de leer la Guía de contribución antes de hacer un pull request, comenzar una discusión o reportar un issue.
¡Gracias por colaborar! ❤️
Si este proyecto te ayuda a reducir el tiempo de desarrollo, puedes patrocinarme para apoyar mi trabajo 😊
Este repositorio tiene una licencia MIT License.
Copyright © 2017-actualidad, Josantonius