在程序中用到了 xheditor 这个超文本编辑器,它在 FF/Chrome 下支持粘贴(Ctrl+V)剪贴板上的图片,但在 IE/Opera/Safari 下不行。
粘贴的图片,与我们平常的不一样,如下所示:
显示效果如下:
这就是所谓的 inline base64 image,经过测试发现它在 FF/Chrome/Opera/Safari/IE8/IE9 下正常显示,在 IE6/IE7 下不能显示。
下面是这种嵌入的图片数据格式简要说明:
data: URI定义于IETF标准的RFC 2397
data: URI的基本使用格式如下:
data:[
mime-type是嵌入数据的mime类型,比如png图片就是image/png。
如果后面跟base64,说明后面的data是采用base64方式进行编码的
对于 IE6/IE7 下不能显示这种嵌入图片的情况,下面的网站给出了一个用js+后台的解决方法:
http://dean.edwards.name/weblog/2005/06/base64-ie/
下面是我参考之后做的一个测试,发现 img.src 的如果太长的话,在 IE6/IE7 下就会出错,因为超过了 IE6/IE7 的最大 URL 长度,大约 2K(Maximum URL length is 2,083 characters in Internet Explorer 在IE中URL最大长度是2083字节)。因此这种方法不能解决所有的问题,谁能保证图片就这么小。
下面的代码,保存到 test.html 中,然后就可以在各个浏览器中正常显示了(但是如果换成上面的 img 代码就不行了)。
上面这个解决方法肯定是不完美的。还有人提出了一种更完美的方案。就是用一堆 JS 去解码 base64 的数据、然后对图像处理、去生成图片。这种方式好繁琐。
个人观点:
在目前情况下,在互联网中 IE6 还占有相当大的份额的情况, base64 image 最好还是不用的好;但是在移动互联网中,大部分浏览器都支持 html5,可以尝试使用。因此,如果碰到在超文本编辑器中提交的图片是 base64 格式的,那么就应该进行处理,提取出该数据(img.src),然后 base64 解码,保存成对应的图片,并将 img.src 设置成文件。
参考资料:
在浏览器中解析Base64编码图像
http://hi.baidu.com/sonan/blog/item/54ab0a4f690e1025aec3ab86.html
BASE64编码的图片在网页中的显示问题的解决
http://staratsky.iteye.com/blog/314651
Base64 Encoded Images for Internet Explorer
http://dean.edwards.name/weblog/2005/06/base64-ie/
http://dean.edwards.name/my/base64-sordid.html
http://dean.edwards.name/my/base64-sexy.html
HTTP Get请求URL最大长度
http://www.4ucode.com/Study/Topic/1080587
IE6.0 :url最大长度2083个字符,超过最大长度后无法提交。
IE7.0 :url最大长度2083个字符,超过最大长度后仍然能提交,但是只能传过去2083个字符。
firefox 3.0.3 :url最大长度7764个字符,超过最大长度后无法提交。
Opera 9.52 :url最大长度7648个字符,超过最大长度后无法提交。
Google Chrome 2.0.168 :url最大长度7713个字符,超过最大长度后无法提交。