mschreiber / earl
Earl 是一个用于解析、构建、修改和打印 URL 字符串的单类库。
v0.1
2021-02-16 00:16 UTC
Requires (Dev)
- phpunit/phpunit: ^9.5
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_url 和 http_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
目前只支持 scheme
和 host
作为默认值。