Data URLs are composed of four parts: a prefix (data:
), a MIME type indicating the type of data, an optional base64
token if non-textual, and the data itself:
data:[<mediatype>][;base64],<data>
The mediatype
is a MIME type string, such as 'image/jpeg'
for a JPEG image file. If omitted, defaults to text/plain;charset=US-ASCII
If the data contains characters defined in RFC 3986 as reserved characters, or contains space characters, newline characters, or other non-printing characters, those characters must be percent-encoded (aka "URL-encoded").
If the data is textual, you can embed the text (using the appropriate entities or escapes based on the enclosing document's type). Otherwise, you can specify base64
to embed base64-encoded binary data. You can find more info on MIME types here and here.
A few examples:
data:,Hello%2C%20World%21
-
The text/plain data Hello, World!
. Note how the comma is percent-encoded as %2C
, and the space character as %20
.
data:text/plain;base64,SGVsbG8sIFdvcmxkIQ==
-
base64-encoded version of the above
data:text/html,%3Ch1%3EHello%2C%20World%21%3C%2Fh1%3E
-
An HTML document with <h1>Hello, World!</h1>
data:text/html,<script>alert('hi');</script>
-
An HTML document that executes a JavaScript alert. Note that the closing script tag is required.