| 
 | 
 
 
下載的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開源程序包。但是 
上面的問題折騰了我好長時間。。希望通過本個教程。。對碰到同樣的問題的兄弟們有所幫助 
。。 
 
 
好是好就是這個錯了  - 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; 
 
 -    }
 
  
- 應譔成
 
 - 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; 
 
 -        if($charcode<127) 
 
 -          $ret .=chr($charcode);
 
 -        else
 
 -            $ret .= iconv("utf-8","gb2312",u2utf8($charcode)); 
 
 -    } 
 
 -        return $ret; 
 
 - }
 
  
  複製代碼 
這樣中文與數字字母混合就不會有問題了 
 
引自:http://blog.chinaunix.net/u/16928/showart_455525.html 
 |   
 
 
 
 |