Base64编码的img,慎用

Base64编码的img介绍

在程序中用到了 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:[][;base64|charset=some_charset], 

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个字符,超过最大长度后无法提交。

 

 

 

 

 

你可能感兴趣的:(前端思考)