防止或清除HTML / CSS标记

时间:2010-08-06 01:35:11

标签: php html css

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

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

问题是:当我在页面中显示此字段的一部分时,未关闭的标记会影响页面其余部分的显示方式。

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

  1. 防止显示这些特定标签;
  2. 显示字段后,我想关闭所有“打开的标签”。
  3. 请注意,第一个选项会好得多。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我会这样做::

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

$tag = strip_tags($return); // will remove tags if exist

print '<p>'$tag'</p>;

答案 3 :(得分:0)

易于使用的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 text或css

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

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