【问题标题】:How to convert HTML entities like – to their character equivalents?如何将 HTML 实体(如 –)转换为对应的字符?
【发布时间】:2011-02-02 22:58:51
【问题描述】:

我正在创建一个要保存在本地用户计算机上的文件(不在网络浏览器中呈现)。

我目前正在使用html_entity_decode,但这并没有转换像–(这是n-dash)这样的字符,我想知道我应该使用什么其他功能。

例如,当文件被导入到软件中时,它会显示为–,而不是 ndash 或只是一个 -。我知道我可以使用str_replace,但如果它发生在这个角色身上,它也可能发生在许多其他角色身上,因为数据是动态的。

【问题讨论】:

    标签: php character-encoding special-characters


    【解决方案1】:

    您需要定义目标字符集。 – 不是默认 ISO-8859-1 字符集中的有效字符,因此未解码。将 UTF-8 定义为输出字符集,它将解码:

    echo html_entity_decode('–', ENT_NOQUOTES, 'UTF-8');
    

    如果可能的话,您应该从一开始就避免使用 HTML 实体。我不知道编码数据来自哪里,但如果你像这样将它存储在数据库或其他地方,那么你做错了。始终存储 UTF-8 编码的数据,并且仅在必要时转换为 HTML 实体或以其他方式转义以输出。

    【讨论】:

    • 好电话。我觉得 get_html_translation_table() 输出的翻译表似乎缺少 –— 很奇怪。但我没想到这是因为默认输出字符集。
    • 我正在使用 WordPress 将数据存储在数据库中。
    【解决方案2】:

    试试mb_convert_encoding():

    $string = "n–dash";
    $output = mb_convert_encoding($string, 'UTF-8', 'HTML-ENTITIES');
    echo $output;
    

    【讨论】:

      【解决方案3】:

      更新

      function decode_characters($data)
      {
          $text = $data;
          $enc = mb_detect_encoding($text, "UTF-8,ISO-8859-1");
          $resutl_characters = iconv($enc, "UTF-8", $text);
          return $resutl_characters;
      }
      

      【讨论】:

        【解决方案4】:

        使用utf8_encode() 将文件编码为UTF-8。那么您不必替换/删除任何东西。

        【讨论】:

        • 我尝试将 charset=utf-8 添加到我的标题 "header('Content-type: text/calendar; charset=utf-8');"并且还运行了使用 utf8_encode($data); 回显到文件中的代码,但它没有任何区别。有什么想法吗?
        【解决方案5】:

        您是否尝试将字符转换为 HTML 实体以供存储和以后检索?

        htmlentities('–', ENT_COMPAT, 'UTF-8');
        // Returns "–"
        

        如果我误读了您的问题,请告诉我。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          • 2021-04-26
          相关资源
          最近更新 更多