如何使用PHP的DOM扩展loadHTML

时间:2009-11-13 19:58:50

标签: php

有人向我建议,为了关闭一些“悬空”的HTML标签,我应该使用PHP的DOM扩展和loadHTML。

我已经尝试了一段时间,寻找教程,阅读this page,尝试各种各样的事情,但似乎无法弄清楚如何使用它来实现我想要的目标。

我有这个字符串:<div><p>The quick brown <a href="">fox jumps...

我需要编写一个关闭打开的HTML标记的函数。

在这里寻找起点。我通常可以快速解决问题。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

虽然我确信你可以让DOM做你想做的事情但我确信你会更好地使用Tidy

答案 2 :(得分:2)

可以使用DOMDocument()&amp ;;在PHP中使用DOMDocument::loadHTML类完成。 DOMDocument::normalizeDocument()方法。

<?php
    $html = '<div><p>The quick brown <a href="">fox jumps';

    $DDoc = new DOMDocument();
    $DDoc->loadHTML($html);
    $DDoc->normalizeDocument();

    echo $DDoc->saveHTML();
?>

输出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><div><p>The quick brown <a href="">fox jumps</a></p></div></body></html> 

从那里开始,只需substr&amp; strpos远离您不想要的HTML,如下:

<?php
    $html = '<div><p>The quick brown <a href="">fox jumps';

    $DDoc = new DOMDocument();
    $DDoc->loadHTML($html);
    $DDoc->normalizeDocument();

    $html = $DDoc->saveHTML();

    # Remove Everything Before & Including The Opening HTML & Body Tags.
    $html = substr($html, strpos($html, '<html><body>') + 12);
    # Remove Everything After & Including The Closing HTML & Body Tags.
    $html = substr($html, 0, -14);

    echo $html;
?>

答案 3 :(得分:0)

我认为你遵循了错误的方法:你必须使用DOM的东西截断字符串,而不是截断它。

我就是这样做的:

  1. 找到要截断字符串的位置
  2. 在该点之后删除所有子节点
  3. 截断字符串