从数据库中回显 BLOB (utf-8)

发布于 2024-12-02 13:40:55 字数 2140 浏览 1 评论 0原文

我目前正在开发一个带有 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

锦欢 2024-12-09 13:40:56

不要进行 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文