+ $encoded = rawurlencode( $contents );
+ // Unencode some things that don't need to be encoded, to make the encoding smaller
+ $encoded = strtr( $encoded, [
+ '%20' => ' ', // Unencode spaces
+ '%2F' => '/', // Unencode slashes
+ '%3A' => ':', // Unencode colons
+ '%3D' => '=', // Unencode equals signs
+ '%22' => '"', // Unencode double quotes
+ '%0A' => ' ', // Change newlines to spaces
+ '%0D' => ' ', // Change carriage returns to spaces
+ '%09' => ' ', // Change tabs to spaces
+ ] );
+ // Consolidate runs of multiple spaces in a row
+ $encoded = preg_replace( '/ {2,}/', ' ', $encoded );
+ // Remove leading and trailing spaces
+ $encoded = preg_replace( '/^ | $/', '', $encoded );
+ $uri = 'data:' . $type . ',' . $encoded;