一个简单的类,用于轻松操作URL。

v1.0.7 2023-08-22 14:55 UTC

This package is auto-updated.

Last update: 2024-09-22 17:19:03 UTC


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吧!。