php - 如何避免DOM解析添加html doctype、<head>和<body>标签?

标签 php parsing dom

<?
    $string = '
    Some photos<br>
    <span class="naslov_slike">photo_by_ile_IMG_1676-01</span><br />
    <span class="naslov_slike">photo_by_ile_IMG_1699-01</span><br />
    <span class="naslov_slike">photo_by_ile_IMG_1697-01</span><br />
    <span class="naslov_slike">photo_by_ile_IMG_1695-01</span><br />    
    ';

    $dom = new DOMDocument();
    $dom->loadHTML($string);
    $dom->preserveWhiteSpace = false;
    $elements = $dom->getElementsByTagName('span');
    $spans = array();
    foreach($elements as $span) {
        $spans[] = $span;
    }
    foreach($spans as $span) {
        $span->parentNode->removeChild($span);
    }
    echo $dom->saveHTML();


?>

我正在使用这段代码来解析字符串。当这个函数返回字符串时,它有一些添加的标签:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Some photos<br><br><br><br><br></p></body></html>

有什么方法可以避免这种情况并返回干净的字符串吗?此输入字符串仅作为示例,在使用中它可以是任何 html 字符串。

最佳答案

自 5.4 起的 PHP 版本,当使用 Libxml 2.6.0 或更高版本编译时,可以使用 options参数 DomDocument::loadHTML() .有了它,您可以做到这一点:

$dom = new DomDocument();
$dom->loadHTML($string, LIBXML_HTML_NODEFDTD | LIBXML_HTML_NOIMPLIED);
// do stuff
echo $dom->saveHTML();

我们通过两个 libxml constants : LIBXML_HTML_NODEFDTD表示不添加文档类型定义,LIBXML_HTML_NOIMPLIED说不要添加像 <html> 这样的隐含元素和 <body> .

关于php - 如何避免DOM解析添加html doctype、<head>和<body>标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528190/

相关文章:

c# - 不同类的大量命令行参数

java - 如何将流结果转换为字符串

javascript - 在 CSS 中设置时无法使用 JavaScript DOM 检测边距

javascript - Ember Shepherd 无法识别 DOM 更改

php - 如何在 PHP 中重新索引数组但索引从 1 开始?

php - 使用 pdo 将克隆行插入数据库

php - 导入希伯来语 Excel 文件,PHP 生成乱码

php - 当用户状态变为1时如何进行更新查询

java - 将多个XML文件的目录解析为Java

java - 何时使用 Java Reflection API,何时不使用