【问题标题】:Encode HTML entities but ignore HTML tags - in PHP编码 HTML 实体但忽略 HTML 标签 - 在 PHP
【发布时间】:2010-12-29 02:21:39
【问题描述】:

我有一个可能看起来像这样的字符串

$str = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>";
htmlentities($str,ENT_COMPAT,'UTF-8',false);

如何在不转换 HTML 标签的情况下将文本转换为 HTML 实体?

注意:我需要保持 HTML 完整

【问题讨论】:

标签: php html html-entities


【解决方案1】:

免责声明:我不会编码任何实体,除了 和 &。也就是说,如果你真的想要这个,那就这样做吧:

$str = '...';
$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);

【讨论】:

  • 我也会这样做,大多数时候不需要对 " 和 ' 进行编码。像 €、á、é 这样的东西应该已经由 Unicode 处理了。
  • @TravisO:我希望输入已经是有效的 HTML。如果他的标记中有 2 > 5,则不会像
  • 你的第三行应该是: $str = str_replace(array('<','>'),array(''), $str);
【解决方案2】:

您面临的问题是,在某些情况下,您已经在文本中编码了“&lt;”和“&gt;”,因此您必须在转换后将它们过滤掉。

这类似于 Evert 的回答,但增加了一个步骤以允许在您的标记中包含 1 &lt; 2 之类的内容:

$str = htmlentities($str,ENT_NOQUOTES,'UTF-8',false);
$str = str_replace(array('&lt;','&gt;'),array('<','>'), $str);
$str = str_replace(array('&amp;lt;','&amp;gt'),array('&lt;','&gt;'), $str);

【讨论】:

    【解决方案3】:

    Pascal MARTIN 发布了一个很好的答案

    看到这个SO topic

    要恢复,您可以使用这段代码来检索通信列表character =&gt; entity:

    $list = get_html_translation_table(HTML_ENTITIES);
    unset($list['"']);
    unset($list['<']);
    unset($list['>']);
    unset($list['&']);
    

    【讨论】:

      【解决方案4】:

      我以前没有使用过 htmlentities,但它似乎是一个更强大的 urlencode 版本(我经常使用它)。您可能想尝试:

      htmlentities(strip_tags($str,ENT_COMPAT),'UTF-8',false);

      就像一个小金块,如果你想保留&lt;br&gt; 作为标准carrage return,你可以这样做:

      htmlentities(strip_tags(str_replace("&lt;br&gt;","\n",$str,ENT_COMPAT)),'UTF-8',false);

      我知道这是我有时喜欢做的事情。

      祝你好运。

      【讨论】:

      • urlencode 和 htmlentities 做不同的事情:urlencode 使字符串有效地放入 url(例如,将 & 变成 %26),htmlentities 转义一个字符串以在 HTML 中使用(例如,将
      【解决方案5】:

      如果你的意思是只转换文本,那么试试这个:

      $orig = "<p>Me & Mrs Jones <br /> live in <strong style="color:#FFF;">España</strong></p>";
      $str = strip_tags($orig);
      
      $str = htmlentities($str,ENT_COMPAT,'UTF-8',false);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 2021-06-23
        相关资源
        最近更新 更多