【问题标题】:Removing most inline styles and properties with PHP [duplicate]使用 PHP 删除大多数内联样式和属性 [重复]
【发布时间】:2011-02-08 20:27:45
【问题描述】:

这个问题与一个类似的案例有关,即Removing inline styles using php

那里的解决方案不会删除,即:<font face="Tahoma" size="4">

但是假设我有一个混合的内联样式和属性,像这样:

<ul style="padding: 5px; margin: 5px;">
    <li style="padding: 2px;"><div style="border:2px solid green;">Some text</div></li>
    <li style="padding: 2px;"><font face="arial,helvetica,sans-serif" size="2">Some text</font></li>
    <li style="padding: 2px;"><font face="arial,helvetica,sans-serif" size="2">Some text</font></li>  
</ul>

实现这个结果需要什么正则表达式?

<ul>
    <li><div>Some text</div></li>
    <li><font>Some text</font></li>
    <li><font>Some text</font></li>  
</ul>

【问题讨论】:

    标签: php regex preg-replace


    【解决方案1】:

    像往常一样,正则表达式并不适合解析 HTML。使用实际的 HTML 解析器可能会更好。

    也就是说……

    $noattributes = preg_replace('/<(\w+) [^>]+>/', '<$1>', $original);
    

    ...将所有包含属性的开始标签替换为相应的不带属性的标签。但是,它也可能意外地碰到包含在其他标签的引用属性中的“标签”(因此实际上不是标签本身)。它还会导致自闭合标签出现问题(它将用&lt;br&gt; 替换&lt;br /&gt;)-尽管如果自闭合标签在标签名称和斜杠之间没有空格,则可以避免这种情况。

    【讨论】:

    • 喜欢吗? $formatted = preg_replace(']+>,'', $text);
    • 查看我的编辑版本;你必须记住分隔正则表达式。
    • 我同意,使用HTML解析更好
    • 是的,当然。问题是,我不是在解析整个 XML/HTML 文档,而是使用 xPath 来检索我需要的部分,但每个项目的描述都可以包含一些 HTML(如提供的示例)。在本节中使用 regExp 不会对性能造成太大影响,不是吗?
    • 可能不会。如果你要多次使用同一个正则表达式,PCRE 求值器通常会为你缓存正则表达式的编译形式,所以不会有太大的影响。
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2012-08-12
    • 2011-09-09
    • 2013-02-02
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多