Я — эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.
<img
src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP///ywAAAAAMAAw
AAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsapyuvUUlvONmOZtfzgFz
ByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5lKh/DeuNcP5yLWGsEbtLiOSp
a/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi4diinWGdkF8kjdfnycQZXZeYGejmJl
ZeGl9i2icVqaNVailT6F5iJ90m6mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uis
F81M1OIcR7lEewwcLp7tuNNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PH
hhx4dbgYKAAA7" />
В Data URL указывает тип содержимого и способ его кодирования. Способа кодирования два — base64 (именно он и указан в примере), увеличивающий содержимое на треть и URL encoding (в этом случае способ кодирования не указывается) — привычный многим способ кодирования при помощи %xx, в лучшем случае вообще не увеличивает размер содержимого, в худшем — увеличивает в три раза.bolk_data_uri_header();
bolk_data_uri('myjpeg.jpg');
bolk_data_uri('ourpng.png', 'border: 2px dotted red');Код самой библиотеки:
function bolk_data_uri_header()
{
echo "<!--\n"
."Content-Type: multipart/related; boundary=\"=_NextPart_01C6A9B1.539AB070\"\n\n"
."--=_NextPart_01C6A9B1.539AB070\n"
."Content-Transfer-Encoding: base64\n"
."Content-Type: text/html\n"
."-->\n\n";
}
function bolk_data_uri($file, $style = '')
{
if (!( file_exists($file) && ($data = @getimagesize($file)) )) return false;
$name = uniqid('', true);
if ($style <> '') $style = ' style="'.htmlspecialchars($style).'"';
echo "<!--\n"
."--=_NextPart_01C6A9B1.539AB070\n"
."Content-Location: {$name}\n"
."Content-Transfer-Encoding: base64\n"
."Content-Type: {$data['mime']}; -->\n"
."<object data='data:{$data['mime']};base64,\n\n";
echo base64_encode(file_get_contents($file));
echo "' {$data[3]}{$style} type='\n{$data['mime']}'><img "
."src='mhtml:http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}!{$name}' {$data[3]}{$style} /></object>\n\n"
."<!--\n"
."--=_NextPart_01C6A9B1.539AB070-->";
return true;
}
У данного метода, по сравнению с обычными data URL есть масса ограничений: необходим специальный заголовок в начале файла, т.е. этот метод невозможно использовать на чужих сайтах, этим методом нельзя воспользоваться (по крайней мере не в таком виде) для включения ресурсов внутрь CSS или JavaScript. В принципе, тут есть достаточно большое поле для экспериментов, возможно все или некоторые из проблем можно решить.
bolk (bolknote.ru)
3 апреля 2008, 22:47,
ответ предназначен sam.dark.myopenid.com:
xplay (openid.yandex.ru/users/xplay)
4 апреля 2008, 09:05
bolk (bolknote.ru)
4 апреля 2008, 14:48
Sas (mmasco.myopenid.com)
5 апреля 2008, 01:56
blog.ad.by (blog.ad.by)
5 апреля 2008, 11:17,
ответ предназначен bolk (bolknote.ru):
bolk (bolknote.ru)
5 апреля 2008, 11:31,
ответ предназначен Sas (mmasco.myopenid.com):
bolk (bolknote.ru)
5 апреля 2008, 11:32,
ответ предназначен blog.ad.by:
u1itka.livejournal.com (u1itka.livejournal.com)
6 апреля 2008, 22:32
bolk (bolknote.ru)
7 апреля 2008, 12:20,
ответ предназначен u1itka.livejournal.com:
Sas (mmasco.myopenid.com)
11 апреля 2008, 07:36,
ответ предназначен bolk (bolknote.ru):
bolk (bolknote.ru)
11 апреля 2008, 13:06,
ответ предназначен Sas (mmasco.myopenid.com):
Sas (mmasco.myopenid.com)
14 апреля 2008, 02:37
bolk (bolknote.ru)
14 апреля 2008, 11:43,
ответ предназначен Sas (mmasco.myopenid.com):
arikon.livejournal.com (arikon.livejournal.com)
14 сентября 2008, 19:28
bolk (bolknote.ru)
14 сентября 2008, 20:31,
ответ предназначен arikon.livejournal.com:
arikon.livejournal.com (arikon.livejournal.com)
15 сентября 2008, 12:10,
ответ предназначен bolk (bolknote.ru):
bolk (bolknote.ru)
15 сентября 2008, 14:24,
ответ предназначен arikon.livejournal.com:
molder.moikrug.ru (molder.moikrug.ru)
16 декабря 2008, 04:20,
ответ предназначен bolk (bolknote.ru):
id.rambler.ru/users/danyv/ (id.rambler.ru/users/danyv/)
17 мая 2009, 12:05
bolk (bolknote.ru)
18 мая 2009, 01:16,
ответ предназначен id.rambler.ru/users/danyv/:
rakeev.livejournal.com (rakeev.livejournal.com)
2 ноября 2009, 09:42
bolk (bolknote.ru)
2 ноября 2009, 11:34,
ответ предназначен rakeev.livejournal.com:
sillysunnybear.livejournal.com (sillysunnybear.livejournal.com)
13 декабря 2009, 14:49
bolk (bolknote.ru)
13 декабря 2009, 19:06,
ответ предназначен sillysunnybear.livejournal.com:
Павел (инкогнито)
9 ноября 2010, 05:22
bolk (bolknote.ru)
9 ноября 2010, 13:02,
ответ предназначен Павлу
http://search-bot.net (инкогнито)
15 октября 2011, 19:54
bolk (bolknote.ru)
15 октября 2011, 22:25,
ответ предназначен http://search-bot.net
Sam Dark (Sam.Dark.myopenid.com)
Проверено в Opera 9.25, IE7, FF4(Minefield).3 апреля 2008, 21:32