在忽略其他标签的同时,将遗漏的<p>标签添加到HTML中的文本的最佳方法是什么?</p>

时间:2009-12-12 21:34:39

标签: php javascript html parsing

我目前正在编写一个函数来解析一些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.

如果您发现段落周围没有<p>个标签。我想解析此HTML并将正确的标记添加到文本的不同段落。此外,无论使用何种解析器,它都无法触及任何其他有效的HTML。例如,不应更改标题和列表。

我已经使用PHP攻击了一个解决方案,虽然它有效,但看起来不是很快

实现这一目标的最佳方法是什么? 我可以使用一个很好的基于PHP或Javascript的解析器吗?

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

2 个答案:

答案 0 :(得分:1)

我的建议是使用HTML Tidy而不是自己一起黑客攻击。

$output = tidy_repair_string($input);

有关选项列表,请参阅HTML Tidy Configuration Options。根据您的需要,默认行为可能很好。

答案 1 :(得分:0)

当然有一个 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 "<p>$es</p>"; 现在,您的文字位于<p>代码