file_get_contents показывает неожиданный вывод при чтении файла

Я хочу вывести встроенное 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")."\"/>";