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.