2010-08-12 1 views
2
include_once 'mysqlconn.php'; 
include_once "functions.php"; 
$filename = $_GET['par'].".xls"; 
header("Content-type: application/x-msexcel"); 
header('Content-Disposition: attachment; filename="'.basename($filename).'"'); 
if ($_GET['i'] == "par1") { 
    func1(); 
} else if ($_GET['i'] == "par2") { 
    echo "şşşıııİİİ"; 
    func2(); 
} else if ($_GET['i'] == "par3") { 
    echo "şşşıııİİİ"; 
    func3(); 
} 

이것은 내 export2excel.php 파일이고 func1,2,3는 functions.php 파일에 있으며 이상한 방식으로 문자 인코딩을 제외한 모든 테이블 출력을 생성합니다. 모든 파일에 utf-8 인코딩을 사용하고 있습니다. 두 번째 else if 문은 건강한 인코딩 된 출력을 생성하지만 나머지 2는 내 출력을 "BÜT ‡ E Ä ° ‡ Ä °"와 같은 이상한 문자로 인코딩합니다. 그것은 터키어로 "BÜTÇE ÇÇİ"입니다.excel로 PHP 출력을 내보내는 것

. 동일한 파일, 동일한 인코딩, 동일한 데이터베이스이지만 다른 결과.

어떤 아이디어가 있습니까?

+2

를 사용하여 코드 주위에 "코드"태그 ! –

답변

19

Excel에서는 기본 유니 코드 인코딩으로 UTF-16LE + BOM을 사용합니다.
출력을 UTF-16LE로 변환하고 UTF-16LE-BOM을 "\xFF\xFE" 앞에 추가해야합니다.

일부 추가 정보 :

대신 내가 기존 라이브러리 중 하나를 사용합니다

편집 :
일부 코드 당신이 정말로 가 기존 라이브러리

<?php 
$output = <<<EOT 
<table> 
    <tr> 
     <td>Foo</td> 
     <td>IñtërnâtiônàlizætiøöäÄn</td> 
    </tr> 
    <tr> 
     <td>Bar</td> 
     <td>Перевод русского текста в транслит</td> 
    </tr> 
</table> 
EOT; 

// Convert to UTF-16LE 
$output = mb_convert_encoding($output, 'UTF-16LE', 'UTF-8'); 

// Prepend BOM 
$output = "\xFF\xFE" . $output; 

header('Pragma: public'); 
header("Content-type: application/x-msexcel"); 
header('Content-Disposition: attachment; filename="utf8_bom.xls"'); 

echo $output; 
+0

감사합니다. 정확히 내가 원하는 것입니다. – edib

+0

Windows에서 모든 것이 잘 작동하지만 redhat Linux 라인에서는 fwrite ($ fh, b "\ xFF \ xFE"); "PHP 구문 분석 오류 : 구문 오류, 예기치 않은 T_CONSTANT_ENCAPSED_STRING/var/www/...."오류가 발생합니다. 이유는 무엇입니까? – edib

+0

내가이 코드를 바꿨을 때 효과가있었습니다. $ fh = fopen ('foo.xls', 'wb'); // BOM 앞에 fwrite ($ fh, "\ xFF \ xFE"); – edib

0

Excel은 기본 인코딩으로 UTF-16LE를 사용합니다. 따라서 UTF-8을 직접 UTF-16LE로 변환하거나 휠을 재발 명하려는 대신 시험 및 테스트를 마친 Excel PHP 라이브러리 중 하나를 사용해야합니다. PHPExcel을 사용하는 것이 좋습니다 ...

+0

변환 할 페이지가 8 페이지 밖에 없습니다. docs에서 읽은 phpexcel 클래스는 셀 변환 만 가능하지만 원시 PHP html 출력은 변환 할 수 없습니다. 그래서 phpexcel을 위해 모든 것을 다시 코딩해야합니다. 클래스의 크기는 7mB입니다. 나는 생각하지 않는다. – edib

+0

정확히 무엇을하려고하는지 잘 모르겠지만, PHPExcel은 "raw"html 출력을 생성 할 수 있습니다 ... 라이브러리 크기에 관해서는 다른 곳에서 주석을 달았습니다 .. 그 중 4.5 MB 7MB는 PHPExcel이 PDF로 내보내기를 지원하기 위해 포함하는 tcpdf 라이브러리입니다. PDF가 필요 없으면 삭제하고 디스크 공간이 3MB 미만이됩니다. –

1

사람의 경우를 사용하지 경우 도움이 될 수 excel_writer를 무들의에서 사용하려고 시도하고 있으며 출력에 인코딩 문제가 발생하고 있습니다. 예를 들어 데이터가 URL 인 보고서를 개발중인 경우 NA 필드 - 다음이 경우에 단순히 적어도 여기 내 예제 엑셀에서 열어 그래서 따옴표의 데이터를 감싸이 문제를 해결하려면 : 실제로 읽을 수 있도록

// Moodles using the PEAR excel_writer export 

$table->setup(); 

$ex=new table_excel_export_format($table); 

$ex->start_document({string}); 
$ex->start_table({string}); 

// heading on the spreadsheet 
$title = array('Report Title'=>'Report 1'); 
$ex->add_data($title); 
// end heading 

$ex->output_headers(array_keys($table->columns)); 

**foreach($data as $row){ 

     $string="'".trim($row->resname,"'")."'"; 
     $row->resname=$string; 
     $ex->add_data($table->get_row_from_keyed($row)); 
}** 

$ex->finish_table(); 
$ex->finish_document();