Purl
Purl is a simple Object Oriented URL manipulation library for PHP 7.2+
Install / Use
/learn @jwage/PurlREADME
Purl
Purl is a simple Object Oriented URL manipulation library for PHP 7.2+
Installation
The suggested installation method is via composer:
composer require jwage/purl
Using Purl
Creating Url instances is easy. You can specify the URL you want, or just use the current URL:
use Purl\Url;
$url = new Url('http://jwage.com');
$currentUrl = Url::fromCurrent();
You can chain methods together after creating the Url like this:
$url = (new Url('http://jwage.com'))
->set('scheme', 'https')
->set('port', '443')
->set('user', 'jwage')
->set('pass', 'password')
->set('path', 'about/me')
->set('query', 'param1=value1¶m2=value2')
->set('fragment', 'about/me?param1=value1¶m2=value2');
echo $url->getUrl(); // https://jwage:password@jwage.com:443/about/me?param1=value1¶m2=value2#about/me?param1=value1¶m2=value2
// $url->path becomes instanceof Purl\Path
// $url->query becomes instanceof Purl\Query
// $url->fragment becomes instanceof Purl\Fragment
Path Manipulation
$url = new Url('http://jwage.com');
// add path segments one at a time
$url->path->add('about')->add('me');
// set the path data from a string
$url->path = 'about/me/another_segment'; // $url->path becomes instanceof Purl\Path
// get the path segments
print_r($url->path->getData()); // array('about', 'me', 'another_segment')
Query Manipulation
$url = new Url('http://jwage.com');
$url->query->set('param1', 'value1');
$url->query->set('param2', 'value2');
echo $url->query; // param1=value1¶m2=value2
echo $url; // http://jwage.com?param1=value1¶m2=value2
// set the query data from an array
$url->query->setData([
'param1' => 'value1',
'param2' => 'value2'
]);
// set the query data from a string
$url->query = 'param1=value1¶m2=value2'; // $url->query becomes instanceof Purl\Query
print_r($url->query->getData()); //array('param1' => 'value1', 'param2' => 'value2')
Fragment Manipulation
$url = new Url('http://jwage.com');
$url->fragment = 'about/me?param1=value1¶m2=value2'; // $url->fragment becomes instanceof Purl\Fragment
A Fragment is made of a path and a query and comes after the hashmark (#).
echo $url->fragment->path; // about/me
echo $url->fragment->query; // param1=value1¶m2=value2
echo $url; // http://jwage.com#about/me?param1=value1¶m2=value2
Extract URLs
You can easily extract urls from a string of text using the extract method:
$string = 'some text http://google.com http://jwage.com';
$urls = Url::extract($string);
echo $urls[0]; // http://google.com/
echo $urls[1]; // http://jwage.com/
Join URLs
You can easily join two URLs together using Purl:
$url = new Url('http://jwage.com/about?param=value#fragment');
$url->join('http://about.me/jwage');
echo $url; // http://about.me/jwage?param=value#fragment
Or if you have another Url object already:
$url1 = new Url('http://jwage.com/about?param=value#fragment');
$url2 = new Url('http://about.me/jwage');
$url1->join($url2);
echo $url1; // http://about.me/jwage?param=value#fragment
Related Skills
node-connect
339.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
339.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.9kCommit, push, and open a PR





