Re: [請益] PHP 產生 RTF

看板PHP作者 (小企鵝)時間12年前 (2012/06/04 14:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串8/12 (看更多)
※ 引述《Clessin (Clemond)》之銘言: : ※ 引述《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; : ?> 這樣好了~你寫兩個檔案 第一個檔案是下載HTML <a href=1.php>PHP FILE</a> <a href=download.rtf>RTF FILE</test> 第二個檔案是產生RTF的這隻程式 <?php $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; file_put_contents("download.rtf", $content); exit; ?> 然後先點第一個連結,就是透過HTTP傳輸後,看看你PHP有沒有多輸出處理什麼.. 第二個連結就很單純的是你程式產生的RTF檔,由你的web server丟出的.. 如果第二個檔案有問題,就是編碼問題. 如果第一個檔案有問題,就是php程式問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 101.13.15.59
文章代碼(AID): #1Fp5UWJz (PHP)
討論串 (同標題文章)
文章代碼(AID): #1Fp5UWJz (PHP)