删除字符串中不匹配的HTML标签

问题描述:

有谁知道PHP函数可以从字符串中删除不匹配的HTML标签。例如<div> This is a string <b> with an unmatched bold tag </div>。如果没有人帮助我制作一个,也许我可以有一个函数来计算开始标记和匹配结束标记的数量。如果他们甚至不是那么删除第一个开标签,或者如果闭标签更多,它会删除最后一个标签?删除字符串中不匹配的HTML标签

我不相信有一个函数。你想要做的是使用类似tidy,PHP支持(PHP Tidy)。 Tidy会为你清理你的HTML。另外,请不要得到解决这个使用正则表达式的想法! ;)

下面是Zend的一个教程,谈论整理你的HTML:

+0

感谢Vivin你保存了我的一天,但是这个扩展在PHP手册中的文档非常有限,但是这个教程对我来说已经做到了! – Freeman 2010-04-05 19:34:09

+0

不用担心!我很高兴这有帮助! – 2010-04-05 19:58:38

没有坚持某种规则结构,这是不可行的。如果你想遵循标准(也就是说,没有</b>突破一个包含块),你可以使用正则表达式来进行前瞻,以确认在找到</div>之前找到</b>

http://www.regular-expressions.info/lookaround.html

+0

为了上帝的爱。 *不要*使用正则表达式来解析HTML! http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – 2010-04-05 18:29:55

+0

@Vivin我希望人们会停止援引这一点。认真。在这种情况下,OP正在尝试处理格式错误的HTML。解析器不会在那里帮助。 – Matt 2010-04-05 19:31:20

+0

确实。我不完全确定为什么人们会认为这不起作用,或者不知何故是一个坏主意。而且,维因,你觉得你珍贵的“整洁”用于清理HTML的是什么?我保证它不是'str_replace()'。 – dclowd9901 2010-04-05 19:46:00