2

PHP のhtmlentities()/htmlspecialchars()関数に問題があります。変換中の文字列には文字 – (html に相当するものは '&oelig') が含まれていますが、htmlentities()との両方htmlspecialchars()がこの文字を変換していません。

PHP が使用している変換テーブルを確認するために実行すると、文字が欠落get_html_translation_table(HTML_ENTITIES)していることに気付きましたが、( ) のような他の靭帯が存在します。どうしてこれなの?– 文字を変換する別の方法はありますか?œæ&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;"
}
4

1 に答える 1

2

PHP 5.4.5 を使用してみましたが、&oelig が正しく出力されます。したがって、これを実際にテストすることはできませんが、デフォルトで使用される iso-8859-1 の実際の文字セットにないためだと思います。それらは補助文字セットにあります。ISO-8859-15 を使用してみてください

htmlentities($s,  ENT_COMPAT | ENT_HTML401, "ISO-8859-15");
于 2012-12-07T16:00:05.493 に答える