2013-07-13 5 views
-1

나는 핵심 PHP 코드를 사용하여 Excel로 데이터를 내보낼 수 있습니다. 다음은 내 코드입니다 :
PHP는 mysql에서 Excel로 UTF - 8 데이터를 내보내기

header('Content-Type: text/html; charset=utf-8'); 
mysql_connect("localhost","root",""); 
mysql_select_db("test"); 
//---------------------------------------- 
mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET utf8"); 
mysql_query("SET COLLATION_CONNECTION = 'utf8_unicode_ci'"); 
//---------------------------------------- 
$filename = "excelwork.xls"; 
$exists = file_exists('excelwork.xls'); 
if($exists) 
{ 
    unlink($filename); 
} 
$filename = "excelwork.xls"; 
$fp = fopen($filename, "wb"); 
$sql = "select * from test"; 
$result = mysql_query($sql); 
$$insert = ""; 
$insert_rows = ""; 
for ($i = 1; $i < mysql_num_fields($result); $i++) 
{ 
    $insert_rows .= mysql_field_name($result,$i) . "\t"; 
} 
$insert_rows.="\n"; 
fwrite($fp, $insert_rows); 
while($row = mysql_fetch_row($result)) 
{ 
    $insert = $row[1]. "\t" .$row[2]. "\t".$row[3]. "\t".$row[4]. "\t".$row[5]; 
    $insert .= "\n";    //  serialize($assoc) 
    fwrite($fp, $insert); 
} 
if (!is_resource($fp)) 
{ 
     echo "cannot open excel file"; 
} 
echo "success full export"; 
fclose($fp); 

============이 내 MySQL의 테이블 ================

입니다
CREATE TABLE IF NOT EXISTS `test` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `status` int(11) NOT NULL DEFAULT '1', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

-- 
-- Dumping data for table `test` 
-- 

INSERT INTO `test` (`id`, `name`, `status`) VALUES 
(1, 'सजल', 1), 
(2, 'सूर्या', 1), 
(3, 'धनश्री', 1), 
(4, 'मनीष', 1), 
(5, 'राहुल', 1); 

출력 엑셀 파일이 출력 준다 :

सजल 
सूरà¥à¤¯à¤¾ 
धनशà¥à¤°à¥€ 
मनीष 
राहà¥à¤² 

을하지만 XLS로를 이용하면 phpMyAdmin 보내면 출력 올 :

,536,
सजल 
सूर्या 
धनश्री 
मनीष 
राहुल 

내 코드가 잘못되었다는 것을 알려주십시오. 나는 많은 것을 시도하고, 많은 포스트를 수색했다.
감사

+0

네 UTF8로의 설정 ---'name'의 VARCHAR (255) 문자 집합을 utf8 COLLATE의 utf8_bin NULL NOT, – Sajal

+0

당신은 무엇을 보는가 텍스트 편집기? phpmyadmin에서 내 보낸 csv와 비교하십시오. –

+0

@ Marcin Krawiec- 두 파일 모두 csv가 아닙니다. 워드 패드에서 두 파일을 모두 열면 문자가 á¤¸à ¥, ठ° à ¥ यŠ¤¾ 종류로 표시됩니다. – Sajal

답변

2

이 질문은

  1. 사용 PHP의 내장 fputcsv() 함수
  2. 전에 CSV 파일에 UTF-8 BOM 헤더 쓰기 순간에 하루에 몇 번을 받게 될 것으로 보인다 당신이 다른 데이터
  3. 가 'OUTFILE INTO MySQL's own export

    SELECT *
    사용을 고려 쓰기/경로 /로/file.csv ' 필드 종료', 'OPTIONALLY ENCLOSED BY' '' ' '\ n '에 의해 종료 된 라인 FROM test;

편집 당신이 당신의 CSV를 열 때

$fh = fopen('test2.csv', 'w+'); 
fwrite($fh, "\xEF\xBB\xBF");  // Write UTF-8 BOM 
fwrite($fh, "sep=\t" . PHP_EOL); // Hint for MS Excel 
while($row = mysql_fetch_row($result)) { 
    fputcsv($fh, $row, "\t"); 
} 
fclose($fh); 
+0

@ Mark - mysql outfile이 작동하지 않습니다. 그것은 UTF-8 문자가 아니라, 을 포함합니다. 나는 fputcsv()를 시도하고있다. UTF-8 BOM 헤더로 도움을받을 수 있습니까? 나는 또한 그것을 일찌기 검색했다 그러나 그것을 사용하는 어떤 단서가 있지 않는다. 감사. – Sajal

관련 문제