The League of Extraordinary Packages

Our Packages:

Presented by The League of Extraordinary Packages

Getting Started

Uri functions

Uri parser

Uri schemes

Uri manipulations

Uri components

Uri Domain Parser

Upgrading Guide

Data URI Path

The library provides a DataPath class to ease complex path manipulation on a Data URI object. This URI component object exposes :

but also provide specific methods to work with Data URI paths.

<?php
class DataPath implements ComponentInterface
{
	public static function createFromPath(string $path): self
	public function __construct(?string $content = null): void
	public function getMediaType(void): string
	public function getMimeType(void): string
	public function getParameters(void): string
	public function getData(void): string
	public function isBinaryData(void): bool
	public function save(string $path): SplFileObject
	public function toBinary(void): self
	public function toAscii(void): self
	public function withParameters(string $parameters): self
}

Instantiation using the constructor

<?php
public DataPath::__construct(?string $content = null): void

submitted string is normalized to be RFC3986 compliant.

If the submitted value is not valid a League\Uri\Components\Exception exception is thrown.

The League\Uri\Components\Exception extends PHP’s SPL InvalidArgumentException.

Instantiation using a file path

<?php
public static function DataPath::createFromPath(string $path): self

Because data URI represents files you can also instantiate a new data URI object from a file path using the createFromPath named constructor.

<?php

use League\Uri\Components\DataPath;

$path = DataPath::createFromPath('path/to/my/png/image.png');
echo $uri; //returns 'image/png;charset=binary;base64,...'
//where '...' represent the base64 representation of the file

If the file is not readable or accessible a League\Uri\Components\Exception exception will be thrown. The class uses PHP’s finfo class to detect the required mediatype as defined in RFC2045.

Accessing the path properties

The DataPath class exposes the following specific methods:

Each of these methods return a string. This string can be empty if the data where no supplied when constructing the URI.

<?php

use League\Uri\Components\DataPath ;

$path = new DataPath('text/plain;charset=us-ascii,Hello%20World%21');
echo $path->getMediaType(); //returns 'text/plain;charset=us-ascii'
echo $path->getMimeType(); //returns 'text/plain'
echo $path->getParameters(); //returns 'charset=us-ascii'
echo $path->getData(); //returns 'Hello%20World%21'
$path->isBinaryData(); //returns false

$binary_path = DataPath::createFromPath('path/to/my/png/image.png');
$binary_path->isBinaryData(); //returns true

Modifying the path properties

Update the Data URI parameters

Since we are dealing with a data and not just a URI, the only property that can be modified are its optional parameters.

To set new parameters you should use the withParameters method:

<?php

use League\Uri\Components\DataPath;

$path = new DataPath('text/plain;charset=us-ascii,Hello%20World%21');
$newPath = $path->withParameters('charset=utf-8');
echo $newPath; //returns 'text/plain;charset=utf-8,Hello%20World%21'

Of note the data should be urlencoded if needed.

Transcode the data between its binary and ascii representation

Another manipulation is to transcode the data from ASCII to is base64 encoded (or binary) version. If no conversion is possible the former object is returned otherwise a new valid data uri object is created.

<?php

use League\Uri\Components\DataPath;

$path = new DataPath('text/plain;charset=us-ascii,Hello%20World%21');
$path->isBinaryData(); // return false;
$newPath = $path->toBinary();
$newPath->isBinaryData(); //return true;
$newPath->toAscii() == $path; //return true;

Saving the data path

Since the path can be interpreted as a file, it is possible to save it to a specified path using the dedicated save method. This method accepts two parameters:

By default the open mode is set to w. If for any reason the file is not accessible a RuntimeException will be thrown.

The method returns the SplFileObject object used to save the data-uri data for further analysis/manipulation if you want.

<?php

use League\Uri\Components\DataPath;

$path = DataPath::createFromPath('path/to/my/file.png');
$file = $uri->save('path/where/to/save/my/image.png');
//$file is a SplFileObject which point to the newly created file;