首页 文章

正则表达式为PHP找到所有自动关闭标签

提问于
浏览
0

我有一个使用DomDocumentFragment的系统,它基于来自数据库或系统其他区域的标记(即其他XHTML代码)创建 .

可能包含的一个这样的标签是:

<div class="clear"></div>

在将字符串添加到DomDocumentFragment之前,内容是正确的 - 类正在正确关闭 .

但是,DomDocumentFragment将其转换为:

<div class="clear"/>

由于标签关闭不正确,这在浏览器中无法正确显示 .

所以我的想法是对DomDocument返回给我的XML字符串进行后处理(包括不正确的div结构,如上所示),并将自闭标签转换回正确的结构......即转回 .

但是我在使用preg_match的模式找到这些标签时遇到了麻烦 - 我看到一些返回所有标签的模式(即查找所有标签),但不仅仅是那些自动关闭的模式 .

我已经尝试过这方面的一些事情,但我的头与正则表达式有点混淆(我开始过于复杂的事情)

/<div(["\d\w\s])\/>/

目标是匹配模式,其中“....”可以是任何有效的XHTML属性 .

有什么建议或指示让我回到正轨吗?

2 回答

  • 1

    限制问题域 - 您需要将 <div class="clear"/> 更改为 <div class="clear"></div> ...以便搜索前者,并使用简单的查找和替换操作将其替换为后者 . 它应该更快,它会更安全

    无论你做什么,都不要试图parse HTML with a regular expression(你试图通过构建一个可以检测具有任意属性的 <div> 的正则表达式来做到这一点 . )

  • 0

    <div></div>
    

    进入DomDocumentFragment实际上并没有将其更改为

    <div/>
    

    它改变成了

    A-DOM-Element-Node-with-name-"div"-and-no-content.
    

    只有在序列化DomDocumentFragment时才会创建 <div></div><div/> . 换句话说,问题不在于DomDocumentFragment,而在于您正在使用的序列化过程 .

    PHP不是我的语言,所以我无法提供更多帮助,但我会为您的DomDocumentFragment寻找与HTML兼容的序列化程序,而不是在序列化后尝试修补输出 .

相关问题