5 votes

file_get_contents affiche une sortie inattendue lors de la lecture d'un fichier

Je souhaite afficher une image jpg en ligne sous la forme d'une chaîne encodée en base64, mais lorsque je fais cela :

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

$filename est un fichier texte local contenant l'image base64. La sortie est la suivante :

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

Et évidemment, l'image n'est pas rendue, mais où se trouve la viennent de ? Elle ne figure pas dans le fichier texte. Si elle est supprimée, l'image s'affiche correctement.

9voto

Another Code Points 2923

C'est un Unicode Marque d'ordre d'octet . Le fichier a été enregistré avec un éditeur qui a ajouté la nomenclature pour indiquer que le fichier est encodé en UTF-8. Ces octets se trouvent donc bien dans le fichier, mais un éditeur de texte ne les affichera pas puisqu'il ne s'agit pas de texte. Pour stocker ce type de données, vous devez supprimer le BOM. Le plus simple est de configurer votre éditeur pour qu'il n'ajoute pas la nomenclature, mais si vous n'avez pas d'influence sur le processus de création du fichier, vous pouvez le faire à la volée dans votre script :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X