2012-12-07 44 views
2

我遇到一些麻煩PHP的htmlentities()/htmlspecialchars()功能。我將字符串中包含的字符OE(HTML相當於是「& oelig」),但都htmlentities()htmlspecialchars()沒有轉換這個角色。爲什麼PHP的htmlentities()不能轉換字符?

當我運行get_html_translation_table(HTML_ENTITIES)看到PHP使用轉換表,我注意到,œ字符缺失,但其他韌帶樣æ&aelig)都存在。爲什麼是這樣?我是否有一種不同的方式來轉換角色?

僅供參考,我運行PHP 5.3.14和這裏的輸出get_html_translation_table(HTML_ENTITIES)

array(100) { 
    [" "]=> 
    string(6) " " 
    ["¡"]=> 
    string(7) "¡" 
    ["¢"]=> 
    string(6) "¢" 
    ["£"]=> 
    string(7) "£" 
    ["¤"]=> 
    string(8) "¤" 
    ["¥"]=> 
    string(5) "¥" 
    ["¦"]=> 
    string(8) "¦" 
    ["§"]=> 
    string(6) "§" 
    ["¨"]=> 
    string(5) "¨" 
    ["©"]=> 
    string(6) "©" 
    ["ª"]=> 
    string(6) "ª" 
    ["«"]=> 
    string(7) "«" 
    ["¬"]=> 
    string(5) "¬" 
    ["­"]=> 
    string(5) "­" 
    ["®"]=> 
    string(5) "®" 
    ["¯"]=> 
    string(6) "¯" 
    ["°"]=> 
    string(5) "°" 
    ["±"]=> 
    string(8) "±" 
    ["²"]=> 
    string(6) "²" 
    ["³"]=> 
    string(6) "³" 
    ["´"]=> 
    string(7) "´" 
    ["µ"]=> 
    string(7) "µ" 
    ["¶"]=> 
    string(6) "¶" 
    ["·"]=> 
    string(8) "·" 
    ["¸"]=> 
    string(7) "¸" 
    ["¹"]=> 
    string(6) "¹" 
    ["º"]=> 
    string(6) "º" 
    ["»"]=> 
    string(7) "»" 
    ["¼"]=> 
    string(8) "¼" 
    ["½"]=> 
    string(8) "½" 
    ["¾"]=> 
    string(8) "¾" 
    ["¿"]=> 
    string(8) "¿" 
    ["À"]=> 
    string(8) "À" 
    ["Á"]=> 
    string(8) "Á" 
    ["Â"]=> 
    string(7) "Â" 
    ["Ã"]=> 
    string(8) "Ã" 
    ["Ä"]=> 
    string(6) "Ä" 
    ["Å"]=> 
    string(7) "Å" 
    ["Æ"]=> 
    string(7) "Æ" 
    ["Ç"]=> 
    string(8) "Ç" 
    ["È"]=> 
    string(8) "È" 
    ["É"]=> 
    string(8) "É" 
    ["Ê"]=> 
    string(7) "Ê" 
    ["Ë"]=> 
    string(6) "Ë" 
    ["Ì"]=> 
    string(8) "Ì" 
    ["Í"]=> 
    string(8) "Í" 
    ["Î"]=> 
    string(7) "Î" 
    ["Ï"]=> 
    string(6) "Ï" 
    ["Ð"]=> 
    string(5) "Ð" 
    ["Ñ"]=> 
    string(8) "Ñ" 
    ["Ò"]=> 
    string(8) "Ò" 
    ["Ó"]=> 
    string(8) "Ó" 
    ["Ô"]=> 
    string(7) "Ô" 
    ["Õ"]=> 
    string(8) "Õ" 
    ["Ö"]=> 
    string(6) "Ö" 
    ["×"]=> 
    string(7) "×" 
    ["Ø"]=> 
    string(8) "Ø" 
    ["Ù"]=> 
    string(8) "Ù" 
    ["Ú"]=> 
    string(8) "Ú" 
    ["Û"]=> 
    string(7) "Û" 
    ["Ü"]=> 
    string(6) "Ü" 
    ["Ý"]=> 
    string(8) "Ý" 
    ["Þ"]=> 
    string(7) "Þ" 
    ["ß"]=> 
    string(7) "ß" 
    ["à"]=> 
    string(8) "à" 
    ["á"]=> 
    string(8) "á" 
    ["â"]=> 
    string(7) "â" 
    ["ã"]=> 
    string(8) "ã" 
    ["ä"]=> 
    string(6) "ä" 
    ["å"]=> 
    string(7) "å" 
    ["æ"]=> 
    string(7) "æ" 
    ["ç"]=> 
    string(8) "ç" 
    ["è"]=> 
    string(8) "è" 
    ["é"]=> 
    string(8) "é" 
    ["ê"]=> 
    string(7) "ê" 
    ["ë"]=> 
    string(6) "ë" 
    ["ì"]=> 
    string(8) "ì" 
    ["í"]=> 
    string(8) "í" 
    ["î"]=> 
    string(7) "î" 
    ["ï"]=> 
    string(6) "ï" 
    ["ð"]=> 
    string(5) "ð" 
    ["ñ"]=> 
    string(8) "ñ" 
    ["ò"]=> 
    string(8) "ò" 
    ["ó"]=> 
    string(8) "ó" 
    ["ô"]=> 
    string(7) "ô" 
    ["õ"]=> 
    string(8) "õ" 
    ["ö"]=> 
    string(6) "ö" 
    ["÷"]=> 
    string(8) "÷" 
    ["ø"]=> 
    string(8) "ø" 
    ["ù"]=> 
    string(8) "ù" 
    ["ú"]=> 
    string(8) "ú" 
    ["û"]=> 
    string(7) "û" 
    ["ü"]=> 
    string(6) "ü" 
    ["ý"]=> 
    string(8) "ý" 
    ["þ"]=> 
    string(7) "þ" 
    ["ÿ"]=> 
    string(6) "ÿ" 
    ["&"]=> 
    string(5) "&" 
    ["""]=> 
    string(6) """ 
    ["<"]=> 
    string(4) "&lt;" 
    [">"]=> 
    string(4) "&gt;" 
} 
+0

如果你輸出的頁面爲UTF-8,你就不需要任何的實體(除'<', '>'和'&')。 – SDC

+0

不錯,但是在我的場景中,我插入到數據庫表中,而不是在網頁上顯示。該表不是UTF-8,所以我需要進行此轉換。我意識到我可以把這個角色當作一個特例,但我寧願htmlentities()爲我處理它。 –

+1

如果在數據庫中使用HTML實體,則不能在HTML以外的任何其他輸出媒體中使用存儲的數據。那真的是你想要的嗎?製作表格utf8,它爲您節省了很多麻煩! – knittl

回答

2

我嘗試使用PHP 5.4.5,它輸出& oelig正確。所以我不能真的測試這個,但我想在ISO-8859-1的實際字符集,其默認情況下使用它,因爲心不是。他們在補充字符集。嘗試使用ISO-8859-15

htmlentities($s, ENT_COMPAT | ENT_HTML401, "ISO-8859-15"); 
+0

非常感謝你,一直在同一個問題上奮戰了幾個小時。 「ISO-8859-15」位是幫助我的關鍵變化。 – bigp

相關問題