2008-10-13 127 views
5

我有一套Word文檔,我想用我寫的PHP工具發佈。我將Word文檔複製並粘貼到文本框中,然後使用PHP程序將它們保存到MySQL中。我遇到的問題來自Word文檔中所有非標準字符,如捲曲引號和省略號(「...」)。我現在所做的是手動搜索並用純文本或HTML實體替換這些類型的東西(以及外部符號,如e-acute)(& eacute;等等)在PHP中是否有函數可以調用獲取Word文檔的輸出並將應該是實體的所有內容轉換爲實體,並將其他符號在Firefox中無法正確顯示爲可顯示的符號。在PHP中將Word文檔轉換爲可用的HTML

謝謝!

回答

3

更好的解決方案是確保您的數據庫設置爲支持UTF-8字符。擴展集中可用的其他字符應涵蓋您所談論的所有「非標準」字符。

否則,如果您確實必須將這些字符轉換爲HTML實體,請使用htmlentities()

+0

根據我的經驗,即使所有正確的字符集編碼的,一些字符一下就被他們一到瀏覽器的時間吞噬。我不知道這是PHP中的一個錯誤(我使用的服務器語言最多)還是什麼,但我發現轉換爲更可靠的實體。 – eyelidlessness 2008-10-13 19:49:24

0

htmlspecialchars()會給你一個很長的路,但要小心,因爲Word文檔很混亂。

5

這使我受益匪淺,在過去:

$str = mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8') 
1

我認爲所有這些答案會錯過一個重要的點。 Windows本身使用latin1的windows風格,所以如果你在Windows機器上粘貼一些特殊的字符(比如不對稱的引號)到一個窗體中,然後發送到一個unix(或者任何非muckrosoft)盒子(對於數據庫來說)或者其他),某些字符不能與unix系統理解的任何內容匹配,因此會出現混淆和亂碼的字符。這意味着即使你有一個UTF-8數據庫並使用htmlentities,一些nasties仍然會通過,因爲它們是操作系統無法識別的字符 - 它們甚至不是UTF-8的一部分 - 是僅限微軟的發明。我很想知道一個流暢的解決方案 - 我所做的是手動將我遇到的僅包含微軟字符的字符代碼黑名單列入UTF-8字符(也是手動)列表中,爲所有這些字符執行str_replace,那麼你可以隨心所欲地做任何事情 - iconv,htmlentities,直接保存到utf8數據庫中,這不重要。

我對這件事的把握都有點不穩定 - 請查看http://www.cs.tut.fi/~jkorpela/www/windows-chars.html,這是一個很好的解釋,我已將其肢解成上面的簡短形式。 - 如果有人有更好的解決方案(當然有一個!)如何PHPify這篇文章解釋...我很想聽到它!

0

下面是我用非便攜式windows字符集解決問題的解決方案。這用它們的等價HTML實體替換了令人討厭的幾乎拉丁文-1字符。

$translation=array(
    // reference from http://www.cs.tut.fi/~jkorpela/www/windows-chars.html 
    "\x82" => "‚", 
    "\x83" => "ƒ", 
    "\x84" => "„", 
    "\x85" => "…", 
    "\x86" => "†", 
    "\x87" => "‡", 
    "\x88" => "ˆ", 
    "\x89" => "‰", 
    "\x8a" => "Š", 
    "\x8b" => "‹", 
    "\x8c" => "Œ", 
    "\x91" => "‘", 
    "\x92" => "’", 
    "\x93" => "“", 
    "\x94" => "”", 
    "\x95" => "•", 
    "\x96" => "–", 
    "\x97" => "—", 
    "\x98" => "˜", 
    "\x99" => "™", 
    "\x9a" => "š", 
    "\x9b" => "›", 
    "\x9c" => "œ", 
    "\x9f" => "Ÿ", 
);  
return str_replace(array_keys($translation),array_values($translation),$input); 

它爲我工作TM