php读取excel文件,输出的值乱码

蓝色的雨哎 2012-04-05 09:00:19
<?php
$handle = fopen("./home.csv","r");
while($items = fgetcsv($handle,1000)){
foreach($items as $k=>$v){
$v = iconv('gb2312','utf-8',$v);
var_dump($v);
}
}
...全文
989 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huqingbin202109 2012-04-07
  • 打赏
  • 举报
回复
读取excel数据要用到一个插件,直接这样读取肯定是不行的。
下面这个是将ecxcel数据读取到数据库的方法:
7.$handle = fopen (”test.csv”,”r”);
8.$sql=”insert into scores(idcard,names ,num,sex,nation,score) values(’”;
9.while ($data = fgetcsv ($handle, 1000, “,”)) {
10.$num = count ($data);
11.for ($c=0; $c < $num; $c++) {
12.if($c==$num-1){$sql=$sql.$data[$c].”‘)”;break;}
13.$sql=$sql.$data[$c].”‘,’”;
14.}
15.print “< br>”;
16.echo $sql.”< br>”;
17.$db->query($sql);
18.echo “SQL语句执行成功!< br>”;
19.$sql=”insert into scores(idcard,names ,num,sex,nation,score) values(’”;
20.}
21.fclose ($handle);
22.$time_end = getmicrotime();
23.$time = $time_end – $time_start;
24.echo “程序执行时间:”.$time.”秒”;
具体请参考:http://www.phpnewer.com/index.php/Ymgx/detail/id/41
xuzuning 2012-04-05
  • 打赏
  • 举报
回复
明白了,你说的是这个问题
这是 php5.3 的一个BUG,php5.2 是正常的

你得换个方法解决了
蓝色的雨哎 2012-04-05
  • 打赏
  • 举报
回复
c3RhZmZfaWQsc3RhZmZfbmFtZSxicmFuY2gsYmFzaWNfd2FnZSxwb3N0X3dhZ2VzLG9sZF9hZ2VfaW5zdXJhbmNlLG1lZGljYWxfaW5zdXJhbmNlLHVuZW1wbG95bWVudF9pbnN1cmFuY2Usd2FnZSxyZWFsX3dhZ2VzLHBlcm1pc3Npb25zX2lkDQpBQkMwMDEs0KHN9Sy/qreiLDI1MDAsMTAwLDIwLDMwLDQwLDMwMDAsMzIwMCwwDQpBQkMwMDIs0KHA7iy/qreiLDI1MDAsMTAwLDIwLDMwLDQwLDMwMDAsMzIwMCwwDQpBQkMwMDMs0KHV1Cy/qreiLDI1MDAsMTAwLDIwLDMwLDQwLDMwMDAsMzIwMCwwDQpBQkMwMDQs0KG2qyy/qreiLDI1MDAsMTAwLDIwLDMwLDQwLDMwMDAsMzIwMCwwDQpBQkMwMDUs0KGxtCy/qreiLDI1MDAsMTAwLDIwLDMwLDQwLDMwMDAsMzIwMCwwDQo=
xuzuning 2012-04-05
  • 打赏
  • 举报
回复
你不是有 echo base64_encode( file_get_contents('test.csv') ); 吗?
贴出他的结果!
蓝色的雨哎 2012-04-05
  • 打赏
  • 举报
回复
以前是先建立个excel文件,写入数据(随便写的),然后把后缀名改成.csv 这样读数据是乱码。
但是后来我先建立个.txt 文件 然后把后缀改成.csv 在写入数据 就不乱码了。
可是 如果数据是中文的话 读不出来 是空的。

<?php
$row = 1;
echo base64_encode( file_get_contents('test.csv') );
$handle = fopen("test.csv","r");
while ($data = fgetcsv($handle, 1000, ",")) {
$num = count($data);
echo "<p> $num fields in line $row: <br>\n";
$row++;
for ($c=0; $c < $num; $c++) {
$data[$c] = iconv('utf-8','utf-8',$data[$c]);
echo $data[$c] . "<br>\n";
}
}
fclose($handle);

员工编号 姓名 员工部门 基本工资 岗位工资 养老保险 医疗保险 失业保险 工资 实际工资 权限ID
ABC001 小王 开发 2500 100 20 30 40 3000 3200 0
ABC002 小李 开发 2500 100 20 30 40 3000 3200 0
ABC003 小赵 开发 2500 100 20 30 40 3000 3200 0
ABC004 小东 开发 2500 100 20 30 40 3000 3200 0
ABC005 小贝 开发 2500 100 20 30 40 3000 3200 0

就是这样的csv文件
xuzuning 2012-04-05
  • 打赏
  • 举报
回复
你这个人好奇怪!是文字就有编码
争这种无聊的问题有助于问题的解决吗?

你只要给出数据文件片段,就可以帮你分析了
开发大刘 2012-04-05
  • 打赏
  • 举报
回复
读取文件 我建议你还是用gbk编码吧,不要迷恋utf8
coder 2012-04-05
  • 打赏
  • 举报
回复
把csv另存为utf-8、

或者用php excelreader
蓝色的雨哎 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

看一下原文件的编码!
[/Quote]
我要用utf-8 编码。excel表格有编码格式吗?
我要把excel数据导入到数据库中。
现在做到了php读取excel数据后 输出的数据都乱码了。
张1987 2012-04-05
  • 打赏
  • 举报
回复
看一下原文件的编码!
代码如诗 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]我也很需要这样的程序,我想把EXCEL通过PHP导入到帝国CMS的MYSQL里边,不清楚该怎么实现。[/Quote]
phpmyadmin有这个功能,或者你可以用mysql的LOAD DATA INFILE语句
蓝色的雨哎 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

需要看到你的数据才能判断原因
[/Quote]
你要看excel 数据?就是个自己随便建的一个excel表格。数据都随便。
aji19810907 2012-04-05
  • 打赏
  • 举报
回复
我也很需要这样的程序,我想把EXCEL通过PHP导入到帝国CMS的MYSQL里边,不清楚该怎么实现。
xuzuning 2012-04-05
  • 打赏
  • 举报
回复
需要看到你的数据才能判断原因
youke1111 2012-04-05
  • 打赏
  • 举报
回复
excel编辑的csv文件是有其他字符的。
蓝色的雨哎 2012-04-05
  • 打赏
  • 举报
回复
对于我在 #8 写的csv数据我输出了一下是:

Array
(
[0] => staff_id
[1] => staff_name
[2] => branch
[3] => basic_wage
[4] => post_wages
[5] => old_age_insurance
[6] => medical_insurance
[7] => unemployment_insurance
[8] => wage
[9] => real_wages
[10] => permissions_id
[11] => ABC001
[12] => 小王
[13] =>
[14] => 2500
[15] => 100
[16] => 20
[17] => 30
[18] => 40
[19] => 3000
[20] => 3200
[21] => 0
[22] => ABC002
[23] => 小李
[24] =>
[25] => 2500
[26] => 100
[27] => 20
[28] => 30
[29] => 40
[30] => 3000
[31] => 3200
[32] => 0
[33] => ABC003
[34] => 小赵
[35] =>
[36] => 2500
[37] => 100
[38] => 20
[39] => 30
[40] => 40
[41] => 3000
[42] => 3200
[43] => 0
[44] => ABC004
[45] => 小东
[46] =>
[47] => 2500
[48] => 100
[49] => 20
[50] => 30
[51] => 40
[52] => 3000
[53] => 3200
[54] => 0
[55] => ABC005
[56] => 小贝
[57] =>
[58] => 2500
[59] => 100
[60] => 20
[61] => 30
[62] => 40
[63] => 3000
[64] => 3200
[65] => 0
)
这样的数组。字段在数据库都有了,只要把数据拿出来插入就行。
但是员 工部门 值都是空的。
xuzuning 2012-04-05
  • 打赏
  • 举报
回复
在 csv 格式标准中:字符串是需要用双引号括起的,但微软的工具软件却偏偏不加这个双引号
在 php5.3 以前的版本中,php 也认同这种做法
但自 php5.3 起,微软摆出了不合作姿态,于是 fgetcsv 也就残废了
etpass_com 2012-04-05
  • 打赏
  • 举报
回复
$fname = $_FILES['MyFile']['tmp_name'];//获取上传的CSV文件
$handle=fopen("$fname","r");//打开文件

//判断导入文件类型是否为csv
//如果为csv继续执行
if($_FILES['MyFile']['type'] !='application/vnd.ms-excel')
{
if($_FILES['MyFile']['type'] != 'text/comma-separated-values')
{
echo "<script>alert('您上传的文件类型不符,请重新上传');window.location='subHotel_import.php';</script>";exit();
}
}

$num = 1;
$total_num = 100;//设置每次添加的数据条数
//删除表中原有数据
$db->query("delete from hotel_activities_2");
//打开导入的csv
//循环添加到表中
while(!feof($handle))
{

$content = fgets($handle);
$data = preg_split("/,/",$content);

if($data[0] =='')
{
continue;
}
$subHotel_id = preg_replace('/[^0-9]/','',$data[0]);
$subHotel_type= (int)preg_replace('/[^0-9]/','',$data[4]);
if($num == $total_num )
{

$num=1;
$values .= " ($subHotel_id,'".$data[1]."','".$data[2]."','".$data[3]."',$subHotel_type),";
$values = rtrim($values,',');
$sql ="insert into hotel_activities_2 (hotel_id,start_date,end_date,content,s_type) values " .$values;
$aaa = $db->query($sql);

$values ='';
}
else
{
$values .= " ($subHotel_id,'".$data[1]."','".$data[2]."','".$data[3]."',$subHotel_type),";
$num++;
}
}
if(mysql_error!==1){
$values = rtrim($values,',');
$sql ="insert into hotel_activities_2 (hotel_id,start_date,end_date,content,s_type) values " .$values;
$db->query($sql);
echo "<script>alert('导入成功!!!');window.location='subHotel_query_file.php';</script>";
}else
{
echo "<script>alert('导入失败!!!');window.location='subHotel_import.php';</script>";
}


fclose($handle);
蓝色的雨哎 2012-04-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

明白了,你说的是这个问题
这是 php5.3 的一个BUG,php5.2 是正常的

你得换个方法解决了
[/Quote]

你能说说什么BUG?现在是有的中文能显示 有的不能。有什么解决的方法?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧