没有不值得去解决的问题,也没有不值得去学习的技术!

Add Query Parameters to a URI in PHP 7.4 with league/uri

1. In Laravel 6, there is a simple implementation based on checking whether the string contains ?

PHP

use Illuminate\Support\Str;

if (Str::contains($themeAwareUrlPath, '?')) {
	$suffix = '&';
} else {
	$suffix = '?';
}

return new HtmlString($prefix.$themeAwareUrlPath.$suffix.'d='.config('app.url'));

2. However, this implementation does not account for some complex URIs. For example: ?d=3&e=5#6 would be replaced with: ?d=3&e=5#6&d=https://xxx.com .

3. I ultimately decided to add query parameters based on league/uri, executing composer require league/uri-components and composer require league/uri.

4. The code implementation is as follows:

PHP

use League\Uri\Uri;
use League\Uri\UriModifier;

$uri = Uri::createFromString($themeAwareUrlPath);
$cdnUri = UriModifier::mergeQuery($uri, 'd=' . config('app.url'));

return new HtmlString($prefix . $cdnUri->jsonSerialize());

5. Based on some common URIs, the replacement results are as follows, meeting expectations:

Plaintext

$themeAwareUrlPath = '9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg';

$themeAwareUrlPath .= '?a=3';
string(102) "9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg?a=3&d=https://xxx.local"

$themeAwareUrlPath .= '?d=3';
string(98) "9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg?d=https://xxx.local"

$themeAwareUrlPath .= '?d=3&e=5#6';
string(104) "9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg?d=https://xxx.local&e=5#6"

$themeAwareUrlPath .= '?a=1&d=3&e=5#6';
string(108) "9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg?a=1&d=https://xxx.local&e=5#6"

$themeAwareUrlPath .= '?#';
string(100) "9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg?&d=https://xxx.local#"

$themeAwareUrlPath .= '?';
string(99) "9919b10c-9217-44eb-8488-198a321067cc/assets/images/default-banner.64bbdd.jpg?&d=https://xxx.local"

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系