2010-08-06 69 views
0

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

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

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

两件事情会解决这个问题:

  1. 避免显示这些特定的标记;
  2. 显示字段后,我想关闭所有'打开标签'。

请注意,选项一号会好得多。

回答

2

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

+0

有PHP手册巨大免责声明:** WARNING ** 因为用strip_tags()并不真正验证HTML,部分或破碎的标签可能导致删除比预期更多的文本/数据。 – stillstanding 2010-08-06 01:46:30

+2

@stillstanding:是的,但(1)这里的html或多或少处于控制之下,(2)我们只会给出一个总结,丢失一些数据不应该是一个很大的问题,它会符合当前的需求。尽管如此,人们会在'substr'之前执行'strip_tags'。 – Wrikken 2010-08-06 01:52:34

0

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

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

当所有的标签都被处理完后,剩下的东西需要关闭。只需一次将它们从一个弹出,然后将结尾追加到字符串的后面。

0

我会做这样::

函数获取串出DB将返回变量$回报

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

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

其易于使用的预浸替换功能

$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的文本”;

,如果你把这个预浸更换 之前,它会告诉你结果=“1”没有标签