【问题标题】:Best way to add missing <p> tags to text in HTML while disregarding other tags?将缺少的 <p> 标签添加到 HTML 中的文本而忽略其他标签的最佳方法?
【发布时间】:2009-12-12 21:34:39
【问题描述】:

我目前正在编写一个函数来解析一些 HTML 并在必要时添加标签。基本上我有一段这样的 HTML:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat, nunc at vestibulum egestas.

<script type="c">
    #include &lt;stdio.h&gt; 
    #define debug(var) printf(#var &quot; = %d\n&quot;, var)
    int main(void)
    {
        int x = 12;
        debug(x)
        return 0;
    }
</script>

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat, nunc at vestibulum egestas.

<h3>Test Heading</h3>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ultricies luctus metus ut cursus.

<ol>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ol>

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ultricies luctus metus ut cursus.

如果您注意到段落周围没有&lt;p&gt; 标签。我想解析这个 HTML 并将正确的标签添加到不同的文本段落中。此外,无论使用什么解析器,它都不能触及任何其他有效的 HTML。例如,标题和列表不应更改。

我已经使用 PHP 编写了一个解决方案,虽然它可以工作,但它并不快看起来很漂亮。

实现这一目标的最佳方法是什么?
有没有一个不错的基于 PHP 或 Javascript 的解析器我可以用来做这个?

我需要将 HTML 分解为元素,添加标签并将组装好的 HTML 写回页面(?)

【问题讨论】:

  • 我想这会很容易使用 XML(或 DOM)解析器 - 尽管我很高兴得到答案......

标签: php javascript html parsing


【解决方案1】:

我的建议是使用HTML Tidy 而不是自己破解它。

$output = tidy_repair_string($input);

有关选项列表,请参阅HTML Tidy Configuration Options。对于您需要的默认行为可能没问题。

【讨论】:

    【解决方案2】:

    当然有 http://simplehtmldom.sourceforge.net/

    // 从字符串创建 DOM

    $html = str_get_html('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse feugiat, nunc at vestibulum egestas.
    
    <h3>Test Heading</h3>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ultricies luctus metus ut cursus.
    
    <ol>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
    </ol>
    
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ultricies luctus metus ut cursus.
    ');
    
    $es = $html->find('text');
    
    
    echo $es; // Output: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras ultricies luctus metus ut cursus.
    

    现在你必须用那个文本做点什么; 像这样echo "&lt;p&gt;$es&lt;/p&gt;"; 现在您的文字位于&lt;p&gt; 标记中

    【讨论】:

    • 这不是一个坏主意,但在 find 方法中使用 'text' 元素也会从 script 标签内返回代码。您无法从返回的代码中获取标签名称。我需要区分每个元素,以便仅将 p 标签应用于纯文本。
    猜你喜欢
    • 2015-07-04
    • 2015-06-24
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 2012-01-25
    相关资源
    最近更新 更多