Я хочу вывести встроенное jpg-изображение как строку с кодировкой base64, однако, когда я это делаю:
$contents = file_get_contents($filename); print "<img src=\"data:image/jpg;base64,".$contents."\"/>";
Где $filename
– это локальный текстовый файл с изображением base64. Вывод выглядит следующим образом:
<img src="data:image/jpg;base64,/9j/4A..... (the rest of the file)...." />
И, как ни странно, изображение не отображается, но откуда это происходит? Это не в текстовом файле. При удалении изображение отображается правильно.
Это знак юникодного байта . Файл был сохранен с помощью редактора, который добавил спецификацию, чтобы указать, что файл закодирован как UTF-8. Таким образом, эти байты фактически находятся в файле, но текстовый редактор просто не покажет его, поскольку это не текст. Для хранения таких данных вы хотите удалить спецификацию. Самый простой способ – настроить ваш редактор, чтобы он не добавлял спецификацию, но если вы не имеете влияния на процесс создания файла, вы могли бы его также на лету в своем скрипте:
print "<img src=\"data:image/jpeg;base64,".ltrim($contents, "\xEF\xBB\xBF")."\"/>";