代码之家  ›  专栏  ›  技术社区  ›  AntonioCS

与htmlentities相处

  •  3
  • AntonioCS  · 技术社区  · 16 年前

    我真的想展示htmlentities给了我什么,但它没有给我什么;欧元;对于性格。

    我正在努力

    echo htmlentities(htmlentities("LISBOA-VIENA DESDE 99€ TAXAS INCLUÍDAS, RESERVE JÁ",ENT_COMPAT,ISO-8859-1),ENT_COMPAT,ISO-8859-1);
        echo '<br>';
        echo htmlentities(htmlentities("LISBOA-VIENA DESDE 99€ TAXAS INCLUÍDAS, RESERVE JÁ",ENT_COMPAT,UTF-8),ENT_COMPAT,UTF-8);
    

    对于这两者,我都得到了

    LISBOA-VIENA DESDE 99 TAXAS INCLU&我可爱;DAS、RESERVE J和;可爱;

    LISBOA-VIENA DESDE 99 TAXAS INCLU&我可爱;DAS、RESERVE J和;可爱;

    我从来没有得到一个&欧元;

    有人知道如何做到这一点吗?

    3 回复  |  直到 16 年前
        1
  •  8
  •   Community CDub    8 年前

    使用这些语句的文件的原始文件编码是什么?

    如果您使用的是Windows,则文件编码的可能性很高 Windows-1252 (CP1252)不在 ISO-8859-1 , ISO-8859-2 UTF-8 .

    这个 € 标志是 0x80 在Windows-1252中,ISO-8859-15对 与签署 0xA4 而ISO-8859-1没有 全部签字( see answer Aron Rottevel)。 您必须确保将用于字符串的正确字符集传递给 htmlentities() 。最佳做法是对所有文件使用UTF-8编码。

    如果 htmlentities("LISBOA-VIENA DESDE 99€ TAXAS INCLUÍDAS, RESERVE JÁ",ENT_COMPAT,'Windows-1252') 如果您使用CP1252字符集,则可以正常工作。

    我还注意到,在上面的例子中,字符集周围缺少引号。这也可能是麻烦的原因。

        2
  •  6
  •   Aron Rotteveel    16 年前

    使用 ISO-8859-15 而不是 ISO-8859-1 .

    ISO-8859-15 (ISO Latin 9) 不同于 ISO-8859-1 (ISO Latin 1) 并添加了中缺失的欧元符号以及法语和芬兰语字母 Latin-1 (ISO-8859-1) .

    echo htmlentities('Working htmlentities() now 99€ off!', ENT_COMPAT, 'ISO-8859-15');
    

    应返回

    Working htmlentities() now 99&euro; off!
    
        3
  •  1
  •   Dr. Hans-Peter Störr    16 年前

    对此进行了讨论 here ;看起来( &#8364; )经常工作。