完美解决jQuery uploadify 导致谷歌浏览器崩溃(Chrome crash)

 问题背景

 谷歌浏览器(Chrome)下,第一次加载uploadify正常,刷新页面谷歌浏览器就会崩溃。

 版本: 39.0.2171.99 m

问题原因:

 中文搜索,通篇一律都是说Chrome缓存导致,部分英文解答也是如此。初步估计,和缓存关系不大,且看解决方法。

解决办法:

1、引入uploadify时,给链接加上时间戳或者随机数,保证浏览器不缓存。

注:搜索结果大部分都是这个解答,但带来的问题是,uploadify文件不小,不缓存的话,加载还是要些开销

2、 使用以下代码执行uploadify事件

 setTimeout(function () {
    $("#upload").uploadify({})...
},0);  

解释:即延时执行uploadify事件,等所有js代码执行完毕才执行。

关于setTimeout(0)解释可参考:http://pandacafe.net/blog/337

总结分析:

1、推荐使用第二种解决办法,延时执行可解决此问题,也能说明此问题和Chrome缓存有一定关系,但不完全是。

2、建议搜索技术问题多采用英文关键词进行搜索,遇到问题多上上:http://stackoverflow.com/

参考链接:http://sharpten.com/blog/2014/11/15/uploadify-google-chrome-aw-snap-crash-page.html

php导出excel(csv)无乱码—完美篇

  一般项目中,都会有导出生成excel的要求,要求不高,一般我们就用导出csv,伪装成excel。对格式要求高一点,就可以采用现有的类库,比如:phpexcel,phpexcel类库有点大,只是为了生成excel导入这么大一个类库到项目里面,有点“划不来”,推荐使用PEAR的Spreadsheet,功能足够使用。当然有足够的时间,可以研究下excel的xml格式,生成xml格式数据,也可以使用excel打开,当然你得符合excel的规范,打开一个excel表格,另存为xml格式,就可以参考excel的xml格式。
言归正传,我们这里讨论的是生成csv。项目中,项目编码是UTF8,生成csv,打开就是乱码。我们采用的办法是iconv转码成gbk编码.csv分隔符可以多种,如逗号、制表符。之前项目里采用的是制表符做分割,那么就遇到问题,数据中不能包含换行、空白和制表符,处理代码如下:

str_replace(array("\r\n", "\n", "\r", "\t", " ", "\0", "\x0B"), '', $str);

另外,生成过程过,如果数据含有html实体,对生成也有影响,那么还得转换html实体。最终导出一个csv单元格的代码如下

htmlspecialchars(iconv('UTF-8', 'GBK', str_replace(array("\r\n", "\n", "\r", "\t", " ", "\0", "\x0B"), '', $str))) . "\t";

生成数据时,处理之多,亦相当麻烦。后来,经过查询资料和手册,找到很好的解决办法。对于乱码问题,我们可以输出BOM头解决,生成繁琐问题,可以采用PHP内置函数fputcsv。最终完整代码如下:

$datas = array(
	array('中国', '喜迎'),
	array('斯巴达', '召开'),
);
// 设定http输出头
header('Content-Type: application/vnd.ms-excel;charset=utf8');
header('Content-Disposition: attachment; filename=test.xls');
header('Pragma: no-cache');
header('Expires: 0');
$fp = fopen('php://output', 'w');
//输出BOM头
fwrite($fp, chr(0XEF) . chr(0xBB) . chr(0XBF));
//输出头
fputcsv($fp, array('表头', '表头测试',));
foreach ($datas as $value) {
	$cell = array(
		$value[0],
		$value[1],
	);
	fputcsv($fp, $cell);
}
fclose($fp);

  ——————————分割线———————————— 

  2012-12-13

  补充修改
该方法可能在某些office2007上打开,中文是乱码,慎用!正在寻求他法。

  ——————————分割线———————————— 

  2013-1-8 补充 

  上述输出UTF8 BOM头法生成的csv,在Office2007未更新的情况下,即未安装SP1安装包的情况下,会乱码,且该情况下,无法识别逗号分隔的csv。
解决办法: 

1、输出UTF-16LE BOM头,转码成UTF-16LE即unicode编码
说明:项目中,请尽量不要涉及中文转码,中文博大精深,iconv和mb_convert_encoding都偶尔会碰到某些字无法转码情况,遇到这种情况,很抓狂,所以绕过这个坑。 

2、使用分隔符\t
说明:按理说应该是\t加\n换行就行了,好吧,我用的是\t\0和\r\0\n\0搞定的,摸索之后才采用,遇到这个坑的童鞋可以试试
  

回头有空,另写个文章继续记录生成csv