【问题标题】:Prevent or clear HTML/CSS tags阻止或清除 HTML/CSS 标签
【发布时间】:2010-08-06 01:35:10
【问题描述】:

我正在使用 PHP、MySQL 和 HTML 开发一个网站。 在数据库中,其中一个字段是可能包含 HTML 标记的文本,例如 <b><i>

我的问题是,在网站的特定部分(搜索部分),我只想显示该字段的“摘要”/子字符串。

问题是:当我让这个字段的一部分显示在页面中时,没有关闭的标签会影响页面其余部分的显示方式。

两件事可以解决这个问题:

  1. 阻止显示这些特定标签;
  2. 字段显示后,我想关闭所有“打开的标签”。

请注意,第一个选项会更好。

【问题讨论】:

    标签: php html css


    【解决方案1】:

    您可以在向用户显示摘要之前使用strip_tags

    【讨论】:

    • PHP 手册中有一个巨大的免责声明:警告 因为 strip_tags() 并不真正验证 HTML,部分或损坏的标签可能会导致删除更多文本/数据超出预期。
    • @stillstanding: 是的,但是(1)这里的 html 或多或少都在控制之下,并且(2)我们只打算给出一个摘要,丢失一些数据不应该是这样很多问题,它会满足当前的需要。一个人会做strip_tags 之前 一个substr 虽然。
    【解决方案2】:

    如果字符串xhtml兼容?如果是,您可以尝试滚动您自己的函数来匹配标签,并在最后自动为它们附加结束标签。

    使用正则表达式查找字符串中的所有开始和结束标记,然后遍历这些标记。如果遇到开始标签(没有“/”),则将其压入堆栈。如果遇到关闭,则弹出栈顶。

    处理完所有标签后,堆栈中剩余的内容将需要关闭。一次只弹出一个,然后将结束附加到字符串的后面。

    【讨论】:

      【解决方案3】:

      我会这样做::

      从 DB 中获取字符串的函数将返回 var $return

      $tag = strip_tags($return); // will remove tags if exist
      
      print '<p>'$tag'</p>;
      

      【讨论】:

        【解决方案4】:

        它易于使用的preg替换功能

        $search = array(
        
        
            "'<script[^>]*?>.*?</script>'si",   // strip out javascript
                            "'<[\/\!]*?[^<>]*?>'si",            // strip out html tags
                            "'([\r\n])[\s]+'",                  // strip out white space
                            "'&(quot|#34|#034|#x22);'i",        // replace html entities
                            "'&(amp|#38|#038|#x26);'i",         // added hexadecimal values
                            "'&(lt|#60|#060|#x3c);'i",
                            "'&(gt|#62|#062|#x3e);'i",
                            "'&(nbsp|#160|#xa0);'i",
                            "'&(iexcl|#161);'i",
                            "'&(cent|#162);'i",
                            "'&(pound|#163);'i",
                            "'&(copy|#169);'i",
                            "'&(reg|#174);'i",
                            "'&(deg|#176);'i",
                            "'&(#39|#039|#x27);'",
                            "'&(euro|#8364);'i",                // europe
                            "'&a(uml|UML);'",                   // german
                            "'&o(uml|UML);'",
                            "'&u(uml|UML);'",
                            "'&A(uml|UML);'",
                            "'&O(uml|UML);'",
                            "'&U(uml|UML);'",
                            "'&szlig;'i",
        
                            );
            $replace = array(   
        
                                                            "",
                                "",
                                "\\1",
                                "\"",
                                "&",
                                "<",
                                ">",
                                " ",
                                chr(161),
                                chr(162),
                                chr(163),
                                chr(169),
                                chr(174),
                                chr(176),
                                chr(39),
                                chr(128),
                                "ä",
                                "ö",
                                "ü",
                                "Ä",
                                "Ö",
                                "Ü",
                                "ß",
        
                            );
        
            $text = preg_replace($search,$replace,$yourtextasstring);
            echo $text;
        

        使用它并将 $yourtextasstring 更改为您的字符串,其中将包含 html 文本或 css

        让我们说 代码:$yourtextasstring = "带有 html 标签的文本 1";

        如果你把它放在 preg 替换之前 它会显示结果 ="1" 没有标签

        【讨论】:

          猜你喜欢
          • 2016-06-17
          • 1970-01-01
          • 2011-02-26
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 2021-01-15
          • 2015-10-16
          • 1970-01-01
          相关资源
          最近更新 更多