Re: [請益] PHP 產生 RTF

看板PHP作者 (Clemond)時間12年前 (2012/06/04 12:41), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串7/12 (看更多)
※ 引述《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
return string mb_convert_encoding...
06/04 14:16, 1F
文章代碼(AID): #1Fp3o3CR (PHP)
討論串 (同標題文章)
文章代碼(AID): #1Fp3o3CR (PHP)