2012-03-15 13 views
5

chcę wydawać inline jpg obraz jako base64 zakodowany ciąg, jednak kiedy to zrobić:file_get_contents pokazuje nieoczekiwane wyjście podczas odczytu pliku

$contents = file_get_contents($filename); 
print "<img src=\"data:image/jpg;base64,".$contents."\"/>"; 

Gdzie $filename jest lokalny plik tekstowy z obrazem base64. Wyjście jest w następujący sposób:

<img src="data:image/jpg;base64,/9j/4A..... (the rest of the file)...." /> 

I obiously obraz nie jest wyświetlany, ale skąd  pochodzi? Nie znajduje się w pliku tekstowym. Jeśli zostanie usunięty, obraz jest wyświetlany prawidłowo.

+0

co dostajesz w var_dump ($ contents); ? – Milap

Odpowiedz

9

Jest to kod Unicode Byte-Order Mark. Plik został zapisany za pomocą edytora, który dodał LM, aby wskazać, że plik jest zakodowany jako UTF-8. Więc te bajty są w pliku, ale edytor tekstu nie pokaże go, ponieważ nie jest tekstem. Do przechowywania tego rodzaju danych będziesz chciał usunąć BOM. Najprostszym sposobem byłoby skonfigurować edytor nie dodawać LM, ale jeśli nie ma wpływu na proces tworzenia pliku można by go on-the-fly w skrypcie zbyt:

print "<img src=\"data:image/jpeg;base64,".ltrim($contents, "\xEF\xBB\xBF")."\"/>"; 
Powiązane problemy