从数据库中回显 BLOB (utf-8)
我目前正在开发一个带有 utf-8 MYSQL 数据库的网络应用程序。我需要显示一些保存为 BLOB 的图像。
在我的天真中,我认为这只是这样的事情:
if($image = $result->fetch_object())
{
header('Content-Type: {$image->mimetype}');
echo $image->data;
}
这不起作用。对我来说,图像数据似乎已转换为 utf-8。所以我想我只是做了一个肮脏的黑客,就像
echo utf8_decode($image->data);
……再次没有任何运气。
之后,我删除了 header(...) 调用来比较二进制结果,
echo file_get_contents('sameImageAsInDatabase.jpg');
并且存在一些微小的差异
file_get_contents(...) - 有效:
ÿØÿàJFIFddÿìDuckyPÿá ¡http://ns.adobe.com/xap/1.0/ © 2010 波士顿大学保留所有权利 ÿîAdobedÀÿÛ„ ÿÀÌÙÿì !1AQ"aq'¡2#±ÁÑBRbr‚'3$ðáñ¢2CS%Òc??4âs“£3DT& dt„5Ó”EU6¤´ÔuV'âòä…W!1AQaq"ð'¡±ÁÑ2BRáb#3ñr‚' CS$Òc4s??“³%â£Td5òDÿÚ?©Ÿ”²XãÆ6z:¿üWöyíäTš/_þ+ÿXàěP0Ž& ;Y?Øq·+ûõEXªÌ?ß?»Qý¸*¡ÿ8*À3ï´Y«ï?XØ¿ñŸÝ¡œF¡t†GÌΣ'I,àµ?£<ÉÒ.=·¿_¤ ˆ
º@s-¤Óé
p®děvÝ—¿ôÒ6• E%äú`wÒ9ÇØ×Ç;ÑTsé‡oÒFÅciBÕìxÇÛÝ®ÒÇâ0Òƒ‡fX/Û⁄⁄jsÖêÁâ2t Åíěq–íǶb?@r (ø_fî§jxÌÿ·¶F¿ÿ;8ÿݤÏ'šOúX5°¢þÙÇþèßdÿ¥οS ³Û{9Ïå3ñêIÿKªAD%›µöf÷fZŽRÉÿK1"päso«l;{¸6¶Á嶂òÅçsÔfÔâM#í@bau·FD ¡V {zÙüÔ‡úGöâýLJ „„5ä‚¿Ê?·R(nîùÜH¤n 'Dnnûù�ß·P'±suÿäI_çŸÛć« 7Tÿ⁄K_çœF Òl\ÜÇ“ÙæoÛ‚¡@3>_Þ$÷ëoÛˆě´Aÿ31ûÌ™sÖpUFnn?ø™s<5ŸÛ‚ ??>f柸<锛‚锨šóñëÉŸòÏíÁˆQëÏÿäIîÔpU…¸1§–âN5 1ý¸*ÈhRë/ïývý¸š…u®™=žvý¸*âŒ!ÖW•ek™¸F¥GÇB†æ|¹” ❗️❗️❗️❗️❗️❗️ õÎâPyùš‡
数据库 - 不起作用:
ÿØÿàJFIFddÿìDuckyPÿá ¡http://ns.adobe.com/xap/1.0/ © 2010 波士顿大学保留所有权利ÿîAdobedÀÿÛ? ÿÀÌÙÿäì !1AQ"aq?¡2#±ÁÑBRbr??3$ðáñ¢2CS%Òc?4âs?£³DT& dt?5Ó?EU6¤´ÔuV'âòä?W!1AQaq"ð?¡±ÁÑ2BRáb#3ñr??€€€CS$Òc4s??³%â£Td5òDÿÚ?©??²XãÆ6z:¿üWöyíäT?/_þ+ÿXà¡P0 ?& ;Y?Øq·+ûõEXªÌ?ß?»Qý¸*?ªÿ8*À3ï´Y«ï?XØ¿?Ýě?F¡t?GÌ�I,àµ?£<ÉÒ.= ·¿_�?
º@s-¤Óé
p®děvÝ?¿ôÒ6? E%äú<代码>wÒ9ÇØ×Ç;ÑTsé?oÒFÅciBÕìxÇÛÝ®ÒÇâ0Ò??fX/Û⁄⁄jsÖêÁâ2t Åíěq?íǶb?@r (ø_fî§jxÌÿ·¶F¿à;8ÿݤÏ??OúX5°¢þÙÇþèßdÿ¥?S ³Û{9Ïå3ñêIÿKªAD%?µöf÷fZ?RÉÿK1"päso«l;{¸6¶Áå¶?òÅçsÔfÔâM#í@bau· FD ¡V {zÙüÔ?úGöâýLJ 7TÿÜK_ç?F Òl\ÜÇ?ÙæoÛ?¡@3>_Þ$÷ëoÛ?´Aÿ31ûÌ?sÖpUFnn?ø?s<5?Û?>fæ?÷?ÍGXÔ?Ü?Ì?Þíûq5aFk©qJüÔ? ×?· Ò?î3¥ä??5Û?©@MÍ×üiôíÁP us?3Ëìó?Û?¡@1qÿäKìóÛ?¤?ù??ÿÜIýsûpT(´sÇæ$>vý¸?lÜ\
有人知道发生了什么事吗?
I'm currently working on a web-app with a utf-8 MYSQL database. There are some images saved as BLOBs which I need to display.
In all my naivety i thought it would just be something like that:
if($image = $result->fetch_object())
{
header('Content-Type: {$image->mimetype}');
echo $image->data;
}
Which doesn't work. To me it seemed like the image-data is converted to utf-8. So I thought I simply do a dirty hack like
echo utf8_decode($image->data);
... again without any luck.
After that I removed the header(...) call to compare the binary result against
echo file_get_contents('sameImageAsInDatabase.jpg');
And there are some tiny differences
file_get_contents(...) - works:
ÿØÿàJFIFddÿìDuckyPÿá ¨http://ns.adobe.com/xap/1.0/ © 2010 Boston University all rights reserved ÿîAdobedÀÿÛ„ ÿÀÌÙÿÄì !1AQ"aq‘¡2#±ÁÑBRbr‚’3$ðáñ¢²CS%Òcƒ4Âs“£³DT& dt„5ÃÓ”EU6¤´ÔuV'âòÄ…W!1AQaq"ð‘¡±ÁÑ2BRáb#3ñr‚’¢²ÂCS$Òc4sƒ“³%â£Td5òDÿÚ?©Ÿ”²XãÆ6z:¿üWöyíÄTš/_þ+ÿXà¨P0Ž&Y?¬q·+ûõEXªÌ?ß?»Qý¸*ƒÃªÿ8*À3ï¯Y«ï?·X¬¿ñŸÝ¨œF¡t†G̦‘I,àµ?£<ÉÒ.=·¿_¦ˆ
º@s-¤Óé
p®d¨vÝ—¿ôÒ6• E%äú`wÒ9ÇØ×Ç;ÑTsé‡oÒFÅciBÕìxÇÛÝ®ÒÇâ0Òƒ‡fX/Û¾¼jsÖêÁâ2t Åí¨q–íǶb?@r (ø_fî§jxÌÿ·¶F¿Ã;8ÿݤϑšOúX5°¢þÙÇþèßdÿ¥ƒS ³Û{9Ïå3ñêIÿKªAD%›µöf÷fZŽRÉÿK¹"päso«l;{¸6¶Á嶂òÅçsÔfÔâM#í@bau·FD ¨V {zÙüÔ‡úGöâýLJ ¦¼¼5Ä‚¿Ê?·R(nîùÜH¤n ‘Dnnûù¬ß·P¡±suÿÄI_çŸÛ‰« 7Tÿ¼K_çœF Òl\ÜÇ“ÙæoÛ‚¡@3>_Þ$÷ëoÛˆ¨´Aÿ31ûÌ™sÖpUFnn?ø™s<5ŸÛ‚ ƒ>fæŸ÷‰<‹Û‚¬šóñëÉŸòÏíÁˆQëÏÿÄIîÔpU…¦¸¹§–âN5 1ý¸*ÈhRë/ïývý¸š…u®™=žvý¸*ÂŒ!ÖW•ek™‹åF¥GÇB†æ|¹”ø‚çႬƒ ÄõÎâPyùš‡
database - doesn't work:
ÿØÿàJFIFddÿìDuckyPÿá ¨http://ns.adobe.com/xap/1.0/ © 2010 Boston University all rights reserved ÿîAdobedÀÿÛ? ÿÀÌÙÿÄì !1AQ"aq?¡2#±ÁÑBRbr??3$ðáñ¢²CS%Òc?4Âs?£³DT& dt?5ÃÓ?EU6¤´ÔuV'âòÄ?W!1AQaq"ð?¡±ÁÑ2BRáb#3ñr??¢²ÂCS$Òc4s??³%â£Td5òDÿÚ?©??²XãÆ6z:¿üWöyíÄT?/_þ+ÿXà¨P0?&Y?¬q·+ûõEXªÌ?ß?»Qý¸*?êÿ8*À3ï¯Y«ï?·X¬¿ñ?ݨ?F¡t?G̦?I,àµ?£<ÉÒ.=·¿_¦?
º@s-¤Óé
p®d¨vÝ?¿ôÒ6? E%äúwÒ9ÇØ×Ç;ÑTsé?oÒFÅciBÕìxÇÛÝ®ÒÇâ0Ò??fX/Û¾¼jsÖêÁâ2t Åí¨q?íǶb?@r (ø_fî§jxÌÿ·¶F¿Ã;8ÿݤÏ??OúX5°¢þÙÇþèßdÿ¥?S ³Û{9Ïå3ñêIÿKªAD%?µöf÷fZ?RÉÿK¹"päso«l;{¸6¶Áå¶?òÅçsÔfÔâM#í@bau·FD ¨V {zÙüÔ?úGöâýLJ ¦¼¼5Ä?¿Ê?·R(nîùÜH¤n ?Dnnûù¬ß·P¡±suÿÄI_ç?Û?« 7Tÿ¼K_ç?F Òl\ÜÇ?ÙæoÛ?¡@3>_Þ$÷ëoÛ?¨´Aÿ31ûÌ?sÖpUFnn?ø?s<5?Û? ?>fæ?÷?ÍGXÔ
?Ü?Ì?Þíûq5aFk©qJüÔ?×?· Ò?î³¥Ä??5Û?©@MÍ×üiôíÁP us?3Ëìó?Û?¡@1qÿÄKìóÛ?¤?ù??ÿ¼IýsûpT(¯sÇæ$>vý¸?lÜ\
Anyone knows what's going on?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不要进行 utf 编码/解码 - 您正在处理二进制数据,而不是文本数据。偶然情况下,您可能会在二进制数据中得到一些看起来像 utf 代码点的字节序列,并且编码/解码序列将损坏您的文件。
Don't do utf encoding/decoding - you're dealing with BINARY data, not TEXT data. By chance you'll probably end up with some byte sequences in the binary data that LOOK like utf code points, and the encode/decode sequence will corrupt your file.