Re: [請益] PHP 產生 RTF
※ 引述《chaoms (小企鵝)》之銘言:
: 觀念你先釐清一下!因為看你敘述後~問題點應該不在編碼~而是在程式
: rtf檔頭有定義codepage,由你敘述應該確定就是cpg950
: 那麼內容編碼就是要符合cp950的編碼規範,如果有unicode就須用\uXXXXX?格式
: 這個觀念和HTML使用charset設big-5時顯示unicode就需用&#XXXXX;格式一樣
: 再來header的charset也可能會影響讀取軟體判別語系...
: 像你用cp950...header的charset應該用big-5才對..
: 另外你有寫output buffering 你知道這個意義在哪裡嗎?
: 意思就是你程式有bom的話再輸出這個rtf檔案格式根本就錯了..
: 目前你提供的資訊大概只能猜常發生狀況就這些...
: 至於你寫的程式是否有真的符合我提到的編碼~那只能當作你編碼有做到!
: 先用cli將轉換過後的rtf存成檔案開啟看看,先確認檔案正常,
: 再來判斷透過http時,因為加了什麼東西造成檔案開啟毀損?
感謝企鵝大的指導,看來我的觀念實在須要再加強,也感謝企鵝大指點了一條加強
的方向.沒錯,這個程式讀進來的樣板rtf檔的確是cpg950,我也照著企鵝大上一篇
的指引將utf-8編碼的中文(從mysql撈出來的)轉成\uXXXXX?格式.
header的charset我也設成big5,但使用者下載回來的檔案就是顯示檔案毀損,
無法開啟.我將讀檔,代換,Output buffer給使用者的code,貼在下方,
希望企鵝大有空的時候看一下,指點一下問題在那裏,感謝!
<?php
mysql_query("SET NAMES 'utf8'");
$result = mysql_query("select * from mytable where sn = '1'");
$row = mysql_fetch_object($result);
$title = $row->title;
$content = file_get_contents("test.rtf");
$title = str_replace(array("&", "#", ";"), array("\\", "u", "?"),
mb_convert_encoding($title, "HTML-ENTITIES", "UTF-8"));
$content = str_replace( "<<title>>", $title, $content );
header('Content-Type: text/richtext;charset=big5');
header('Content-Disposition: attachment; filename=download.rtf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
ob_clean();
flush();
echo $content;
exit;
?>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.34.41.161
→
06/04 14:16, , 1F
06/04 14:16, 1F
討論串 (同標題文章)