2012-12-07 110 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

相关问题