2011-03-23 55 views
8

我需要逃避所有的HTML标签,但与像一些例外逃生某些HTML标签:< B>,< FONT>等在一个字符串

例如:

Hello <b>world</b>. How are <span>you</span>? 

会导致:你好世界。你怎么<跨度>您</SPAN>

回答

4

以我的经验,操纵某些HTML标签的最佳方式在我的经验是使用像HTML purifier这样的DOM解析器,但是这对设置来说可能有点棘手,甚至对于你的应用程序来说有点矫枉过正。如果我再做一遍,我会使用不同的格式(如wiki格式或bb代码)而不是HTML,这样您可以将自己的简单标签转换为HTML,并且可以完全控制输出。

回到现在的问题,一个快速解决方案是使用strip_tags()并传递标签白名单的第二个参数 - 虽然这不是100%完美/安全的出HTML,所以在长运行你应该使用DOM解析器或不允许HTML输入。

+2

我不想去掉标签,我想逃避它们。看看我的例子,span标签仍然存在,但它的逃逸意义将显示 – keepwalking 2011-04-02 13:58:43

+0

如果您想要了解一些HTML标签而不是其他的,我会认真考虑如何/为什么要这样做,因为您会**从来没有**能够准确或安全地用正则表达式解析DOM。为了造型,我会使用自定义标签,然后转义**全部** HTML。 – Dunhamzzz 2011-04-02 19:45:31

+0

是的,我不能使用自定义标签,因为邮件来自电子邮件过滤器等......它的复杂。我用一个简单的preg_replace解决了这个问题。感谢您的支持。 – keepwalking 2011-04-04 17:46:01

-1

PHP有一个功能strip_tags,我认为这将是你在寻找什么here

+0

strip_tags不安全,只看警告。 – Peeter 2011-03-23 09:34:34

+1

@Peeter:实际上strip_tags是安全的,它是你输入的html,需要检查 - 因为它基于正则表达式......如果HTML错误,那么你有更大的问题,然后剥离标签 – BigFatBaby 2011-03-23 09:43:33

+2

否,strip_Tags是不安全的,它根本不考虑属性,所以会解析得很好。 – Dunhamzzz 2011-03-23 09:50:52

0

它需要一个简单的逻辑来实现,像下面:
1.创建HTML标签的列表,你不想逃跑。
2.拦截一个html标签(打开或关闭)。
3.如果标签不在列表中,请用& lt替换周围的尖括号(<>);和& gt,即<mytag>变成& lt; mytag & gt;
4.对html文件中的所有标签重复此操作。