Php 防止或清除HTML/CSS标记

Php 防止或清除HTML/CSS标记,php,html,css,Php,Html,Css,我正在开发一个使用PHP、MySQL和HTML的网站。 在数据库中,其中一个字段是可能包含HTML标记的文本,例如或 我的问题是,在网站的特定部分(搜索部分),我只想显示此字段的“摘要”或子字符串 问题是:当我在页面中显示此字段的一部分时,未关闭的标记会影响页面其余部分的显示方式 有两件事可以解决这个问题: 防止显示这些特定标签 显示字段后,我要关闭所有“打开的标记” 请注意,选项1会更好。您可以在向用户显示摘要之前使用。如果字符串与xhtml兼容?如果是,您可以尝试滚动您自己的函数以匹配标记,

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

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

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

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

  • 防止显示这些特定标签
  • 显示字段后,我要关闭所有“打开的标记”

  • 请注意,选项1会更好。

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

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

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


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

    我会这样做:

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

    $tag = strip_tags($return); // will remove tags if exist
    
    print '<p>'$tag'</p>;
    
    $tag=strip_tags($return);//如果存在,将删除标记
    打印“”$tag“


    其preg-replace功能易于使用

    $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;
    
    $search=array(
    “']*?>*?*?*?”,//去掉javascript
    “'si',//去掉html标记
    “([\r\n])[\s]+”,//去掉空白
    “&(quot|#34|#034|#x22);'i”,//替换html实体
    “&(amp|#38|#038|#x26);'i”,//添加了十六进制值
    “&(lt|60|060|x3c);“我”,
    “&(gt|62|062|x3e);“我”,
    “&(nbsp|160|xa0);“我”,
    “&(iexcl|161);“i”,
    “&(cent|162);“i”,
    “&(英镑|#163);“我”,
    “&(复印件169);“我”,
    “&(reg|174);“i”,
    “&(deg|176);“i”,
    “&(39 | 039 | x27);”,
    “&(欧元|#8364);‘i’,//欧洲
    “&a(uml | uml);”,//德语
    “&o(uml | uml);”,
    “&u(uml | uml);”,
    “&A(uml | uml);”,
    “&O(uml | uml);”,
    “&U(uml | uml);”,
    “ß;'i”,
    );
    $replace=数组(
    "",
    "",
    "\\1",
    "\"",
    "&",
    "",
    " ",
    chr(161),
    chr(162),
    chr(163),
    chr(169),
    chr(174),
    chr(176),
    chr(39),
    chr(128),
    "ä",
    "ö",
    "ü",
    "Ä",
    "Ö",
    "Ü",
    "ß",
    );
    $text=preg_replace($search,$replace,$yourtextasstring);
    echo$文本;
    
    使用此选项并将$yourtextasstring更改为具有html文本或css的字符串

    比方说 代码:$yourtextasstring=“带有html标记的文本1”

    如果你把这个放在preg替换之前
    它将显示不带标记的result=“1”

    PHP手册中有一个巨大的免责声明:警告,因为strip_tags()实际上并不验证HTML,部分或损坏的标记可能会导致删除比预期更多的文本/数据。@stillstanding:是的,但正如(1)这里的HTML或多或少处于控制之下,以及(2)我们只想给出一个总结,丢失一些数据应该不是什么大问题,它符合当前的需要。不过,我们可以在
    substr
    之前做
    strip\u标记。