filippo-toso / uri
一个简单的类,用于轻松操作URL。
Requires
- php: ^7.2 || ^8.0
README
一个简单的类,用于轻松操作URL。
要求
- PHP 7.2+
安装
使用Composer安装它
composer require filippo-toso/uri
基本用法
您可以使用静态 make()
或通过其构造函数创建URI类的实例
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com#fragment';
$uri = URI::make($url);
// or
$uri = new URI($url);
您还可以传递其他可选参数,这些参数将在创建URL的查询字符串部分时使用。请检查源代码以获取更多详细信息。
一旦您有了类的实例,您就可以使用其流畅的API来按需操作URL。
例如,让我们更改协议和域名
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com';
$newUrl = URI::make($url)
->scheme('https') // Changes the url to: https://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com
->domain('test.com') // Changes the url to: https://test.com/dir/sub/file.php?name=john&emailjohn@smith.com
->url();
您可以通过调用以下方法来获取/设置URL的相对部分: scheme(), user(), pass(), host(), port(), path(), query() 和 fragment()
。
例如,让我们获取域名
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com';
$domain = URI::make($url)
->domain();
您可以将该类转换为字符串以获取整个URL,或者您可以使用上面显示的 url()
方法。您还可以使用 original()
方法获取未修改的URL。
更复杂的使用
现在让我们做些更复杂的事情,例如,让我们通过相对路径更改URL。
use FilippoToso\URI\URI;
$url = 'http://www.example.com/dir/sub/file.php?name=john&emailjohn@smith.com';
$relativeUrl = '../../hello.php';
$newUrl = URI::make($url)
->relative($relativeUrl) // Changes the url to: http://www.example.com/hello.php?name=john&emailjohn@smith.com
->url();
传递给 relative()
方法的参数可以是一个完整URL(在这种情况下,整个URL将被替换为新URL),一个绝对路径或一个相对路径。它还可以包括查询字符串和片段。
您还可以使用 extension()
方法仅更改文件的扩展名,或使用 params()
方法(它接受一个参数数组作为输入)或 query()
(它接受一个字符串作为输入)来替换查询字符串。
查询字符串操作
关于查询字符串操作,还有一些有用的方法来完成这项工作。例如,您可以使用
add()
添加一个参数remove()
删除一个参数set()
替换参数值get()
获取参数值
所有这些方法都接受点符号作为键名。例如,要更改像 $_GET['post']['content']['html']
这样的参数,您将使用点符号 post.content.html
。
关于 remove()
方法,您不仅可以传递一个键,还可以传递一个回调来一次删除多个元素。例如,以下代码用于删除所有用于跟踪Google Analytics中活动的 utm_*
参数
$url = 'https://www.example.com/?utm_source=summer-mailer&utm_medium=email&utm_campaign=summer-sale';
$newUrl = URI::make($url)->remove(function ($key, $value) {
return (bool)preg_match('#^utm_#si', $key);
})->url();
就是这样,去更改URL吧!。