Earl 是一个用于解析、构建、修改和打印 URL 字符串的单类库。

v0.1 2021-02-16 00:16 UTC

This package is auto-updated.

Last update: 2024-09-16 07:51:29 UTC


README

Earl 是一个用于解析、构建、修改和打印 URL 字符串的单类库。

受到 jQuery 和 Requests(Python 库)的启发,旨在使 URL 操作尽可能方便。

用法

use Earl\Url;

创建

// From a string
$url1 = Url::from('https://website.com/my/path?key=value');

// From another Earl\Url 
$url2 = Url::from($url1); 

// From an array
$url3 = Url::from([
    'host' => 'website.com',
    'path' => '/my/path',
    'query' => ['key' => 'value']  // can also use 'q'
]);

// cloneable
$url4 = clone $url3;

// Create empty url
$url5 = new Url();

打印

$urlString = (string) $url;
$urlString = $url->str();

修改

$url = new Url();

// Argument sets value
$url->host('website.com');

// No arguments gets value 
$host = $url->host();

// Fluent setters
$url->path('my/path')
    ->path($url->path() . '/morepath');

assert($url == 'https://website.com/my/path/morepath');

处理查询数据

// Get param value
$url->q('a');

// Get entire query
$url->q();

// Set query param
$url->q('a', 1);

// Set entire query
$url->q(['a' => 1, 'b' => 2])

// Null values will not appear in URL string
$url->q('a', null);

查询编码和解码的行为与 parse_urlhttp_build_query 相同

$url = Url::from('http://website.com?a=%28myparam%29%21+is+encoded');
assert($url->q('a') == '(myparam)! is encoded');

$url = Url::from('http://website.com')->q('a', '(myparam)! is encoded');
assert($url == 'http://website.com?a=%28myparam%29%21+is+encoded');

部分 URL

如果省略了主机,URL 将是一个只包含路径、查询和片段的“部分”URL。

$url = Url::from([
    'path' => '/my/path', 
    'q' => ['a' => 1],
    'fragment' => 'frag
]);

assert($url == '/my/path?a=1#frag');

身份验证

$url = Url::from('http://website.com')
    ->user('me@email.com')
    ->pass('secret');

assert($url == 'http://me%40email.com:secret@website.com');

全局默认值

你可能在一个上下文中工作,其中你构建的大多数 URL 都具有相同的协议、主机等。你可以为这些值设置全局默认值

Url::defaults(['scheme' => 'https', 'host' => 'www.mywebsite.com']);

$url = Url::from('/my/path?a=1');
assert($url == 'https://www.mywebsite.com/my/path?a=1');

// Clear defaults
Url::defaults();

默认协议是 https

目前只支持 schemehost 作为默认值。