Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5120495
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类:

2008-01-03 03:56:43

demo就不加了。。下载的PHPExcelParser程序包中含有demo源码.
 
我的采用的是Utf8字符集。。
 
我们读取后输出的中文数据都为类似:
 
    宝石   (宝石)这样类型的数据。。
 
其显示是正常的,只不过他是采用了以文本格式表示的unicode代码。

在includes.inc中定义了一个get函数,
 
定义如下:
 

function get( $exc, $data ) 
{
  switch( $data['type'] )
  {
  // string
  case 0:
  $ind = $data['data'];
  if( $exc->sst[unicode][$ind] ) {
  return uc2html($exc->sst['data'][$ind]);//这就是编码处理。如果你需

//要,可以这里。但不建议那样做
  }else
  return $exc->sst['data'][$ind];
  // integer
  case 1:
  return (integer) $data['data'];
  // float
  case 2:
  return (float) $data['data'];
                  case 3:
  return gmdate("m-d-Y",$exc->xls2tstamp($data[data]));
  default:
  return '';
  } 
}

所有读出数据都要在这里处理

在PHPExcelParser中我们可以找到其 uc2html函数定义为 :
 
 

function uc2html($str) {
  $ret = '';
  for( $i=0; $i<strlen($str)/2; $i++ ) {
  $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
  $ret .= '&#'.$charcode;
  }
  return $ret; 

}
  

通过上面个函数结合demo。我们不难看出:一个unicode编码的串经过uc2html后已经是文本

形式的串了 。

修改uc2html函数为 :


  function uc2html($str) {
  $ret = '';
  for( $i=0; $i<strlen($str)/2; $i++ ) {
  $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
  // $ret .= '&#'.$charcode;
  $ret .= iconv("utf-8","gb2312",u2utf8($charcode));
  }
  return $ret;
  }

如果您和我一样采用Utf-8编码。将:

$ret .= iconv("utf-8","gb2312",u2utf8($charcode));

改为:

$ret .= u2utf8($charcode);

解决此问题的关键为u2utf8函数:

 

<?php
/**
* 转换unicode十进制内码为utf-8编码
*/

function u2utf8($c) {
$str="";
if ($c < 0x80) {
  $str.=$c;
} else if ($c < 0x800) {
  $str.=chr(0xC0 | $c>>6);
  $str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x10000) {
  $str.=chr(0xE0 | $c>>12);
  $str.=chr(0x80 | $c>>6 & 0x3F);
  $str.=chr(0x80 | $c & 0x3F);
} else if ($c < 0x200000) {
  $str.=chr(0xF0 | $c>>18);
  $str.=chr(0x80 | $c>>12 & 0x3F);
  $str.=chr(0x80 | $c>>6 & 0x3F);
  $str.=chr(0x80 | $c & 0x3F);
}
return $str;
}

 

已经搞了一周了。。今天夜里终于搞定了这个东东。。

其实个人认为PHPExcelParser是所有读取excel文件最好用的一款php开源程序包。但是

上面的问题折腾了我好长时间。。希望通过本个教程。。对碰到同样的问题的兄弟们有所帮助

。。

                                                   逸飞敬上

                                                   2008-01-03夜 凌晨

                                                          

阅读(5181) | 评论(11) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-01-17 10:49:24

是个好东东。 我也刚刚转到PHP Excel Parser,你的这个函数帮了我的大忙。