【问题标题】:PHP - Display Tags Within Tag as TextPHP - 将标签内的标签显示为文本
【发布时间】:2012-03-11 10:33:33
【问题描述】:

很抱歉无法使标题更清晰。

基本上,我可以在我的页面上键入文本,其中所有 HTML-TAGS 都被剥离,除了我允许的一对。

我想要的是能够输入我想要的所有标签,以纯文本形式显示,但前提是它们位于“代码”标签内。我知道我可能会使用 htmlentities,但如何才能只影响“代码”标签中的标签?

可以吗?

提前谢谢各位。

例如,我有 $_POST['content'] 这是网页上显示的内容。并且是我遇到问题的所有输出的变量。

假设我发布了一段文本,它将被删除所有标签,除了少数标签,包括“代码”标签。

在代码标签中我放置了代码,例如 HTML 信息,但这应该显示为文本。如何将 HTML 标签转义为仅在“代码”标签中显示为纯文本?

以下是我可以输入的示例:

Hi there, this is some text and this is a picture <img ... />. 
Below I will show you the code how to do this image:

<code>
    <img src="" />
</code>

标签中的所有内容都应该显示为纯文本,这样它们就不会从 PHP 的 strip_tags 中删除,而只有标签中的 html 标签。

【问题讨论】:

    标签: php html


    【解决方案1】:

    如果是严格的代码标签,那么它可以很容易地完成。

    首先,通过任何出现的“' or '”来分解你的字符串。 例如字符串:

    Hello <code> World </code>
    

    应该变成一个 4 项数组:{Hello,,World!,}

    现在循环遍历从 0 开始并以 4 递增的数组。您点击的每个元素,运行您当前的脚本(以删除除允许标签之外的所有标签)。 现在循环遍历从 2 开始并以 4 递增的数组。您点击的每个元素,只需在其上运行 htmlspecialentities。

    Implode 你的数组,现在你有一个字符串,其中标签内的任何内容都被完全清理,标签外的任何内容都被部分清理。

    【讨论】:

      【解决方案2】:

      这是我找到的非常适合我的解决方案。 感谢大家的帮助!

      function code_entities($matches) {
          return str_replace($matches[1],htmlentities($matches[1]),$matches[0]);
      }
      
      $content = preg_replace_callback('/<code.*?>(.*?)<\/code>/imsu',code_entities, $_POST['content']);
      

      【讨论】:

        【解决方案3】:

        下面是一些可以解决问题的示例代码:

        $parsethis = '';
        $parsethis .= "Hi there, this is some text and this is a picture <img src='http://www.google.no/images/srpr/logo3w.png' />\n";
        $parsethis .= "Below I will show you the code how to do this image:\n";
        $parsethis .= "\n";
        $parsethis .= "<code>\n";
        $parsethis .= "    <img src='http://www.google.no/images/srpr/logo3w.png' />\n";
        $parsethis .= "</code>\n";
        
        $pattern = '#(<code[^>]*>(.*?)</code>)#si';
        
        $finalstring = preg_replace_callback($pattern, "handle_code_tag", $parsethis);
        
        echo $finalstring;
        
        function handle_code_tag($matches) {
            $ret = '<pre>';
            $ret .= str_replace(array('<', '>'), array('&lt;', '&gt;'), $matches[2]);
            $ret .= '</pre>';
            return $ret;
        }
        

        它的作用:

        首先使用preg_replace_callback,我匹配&lt;code&gt;&lt;/code 中的所有代码,将其发送到我的回调函数handle_code_tag,它会转义内容中的所有小于和大于标记。匹配数组将在1 中包含完全匹配的字符串,(.*?) in [2].#si` s 的匹配表示匹配。跨线刹车和 i 表示不区分大小写

        在我的浏览器中呈现的输出如下所示:

        【讨论】:

        • 抱歉,这不起作用, 中的标签仍在被删除
        • 我正在寻找的是 php strip_tags 功能,但要在 中的标签上调用 htmlentities
        • 首先,我的示例代码将&lt;code&gt; ... &lt;/code&gt; 中的所有&amp;lt;&amp;gt; 替换为&amp;lt;&amp;gt;。我以为您希望能够在&lt;code 中显示实际标签而不是渲染版本?所以你想完全删除 &lt;code&gt; 内的所有标签,只剩下标签内的文本?
        • 你的代码是我想要的,但它不起作用,它仍然显示 而不是 <我的脚本剥离了所有标签,但我需要它以便 标签中的标签不会被剥离,而是显示为纯文本,可以这样做吗?
        • 你能用一些半真实的数据更新你的帖子,所以我可以在我的服务器上测试一下吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 1970-01-01
        • 2013-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多