如何避免 DOM 解析添加 html doctype、 和 标签? [复制]

2023-11-27

<?
    $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 常量: LIBXML_HTML_NODEFDTD表示不添加文档类型定义,并且LIBXML_HTML_NOIMPLIED说不要添加隐含元素,例如<html> and <body>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何避免 DOM 解析添加 html doctype、 和 标签? [复制] 的相关文章

随机推荐

  • 从内容页设置母版页上的属性值

    每次加载页面时 我都需要将数据传递给母版页中的变量 我在每个内容页面上设置了一个RequiredRoles 字符串 定义了访问该页面所需的角色 在我的母版页上 我有一种方法可以获取该数组 并检查当前用户是否属于这些角色中的一个或多个 我将如
  • 方法重载装饰器

    我正在尝试编写一个为 python 提供方法重载功能的装饰器 类似于中提到的PEP 3124 我编写的装饰器非常适合常规函数 但我无法让它适用于类中的方法 这是装饰器 class Overload object def init self
  • UI Router Extras 破坏了我的单元测试并出现意外结果错误?

    问题 安装 ui router extras 不是普通的 ui router 时 为什么我的测试失败 我该如何使用ui router extras我的测试仍然通过吗 如果你想快速安装 请使用 yeoman angular fullstack
  • 如何向单个客户端而不是所有客户端发送命令?

    我正在用 Indy 10 编写一个简单的客户端 服务器聊天程序 我的服务器 idtcpserver 向客户端发送一条命令 客户端应答 但是当连接多个客户端并且服务器发送命令时 all连接的客户端向服务器发送数据 如何向指定客户端而非全部客户
  • 限制 API 调用。仅允许我的移动应用程序

    我想要我的网络服务器接受请求起源仅从我的移动应用 由于移动应用程序是客户端应用程序 这意味着用户可以拥有二进制文件并反编译它 或者使用 Fiddler 等工具来解释 API 调用并重建它们 例如 在控制台应用程序中 所以我想要的是一种方法生
  • 有哪些好的方法可以防止 JavaScript 多人游戏作弊?

    想象一个带有滚动关卡的太空射击游戏 有哪些方法可以防止恶意玩家修改游戏以谋取私利 他可以做的服务器端难以限制的事情是自动瞄准 在可见区域外窥视 加速黑客攻击和其他事情 有哪些方法可以防止这种情况发生 假设服务器是任何语言 并且客户端通过 W
  • 故障模块:kernelbase.dll。应用程序崩溃

    I Have an application done in Net framework 3 5 C Net I installed the application in Windows 7 But while opening some fo
  • Enum.IsDefined 带有标记的枚举

    我目前正在看书C 4 0 简而言之顺便说一句 我认为这是一本很棒的书 即使对于高级程序员来说也可以作为很好的参考 我回顾了有关基础知识的章节 发现了一个技巧 可以在使用标记枚举时判断枚举中是否定义了某个值 书中指出 使用Enum IsDef
  • 为什么大写字母不能用于定义值的模式匹配?

    为什么我可以使用小写字母作为名称 val a bC 1 2 1 2 match case a bC gt 并且不能使用大写字母 compile errors not found value A BC val A BC 1 2 compile
  • Django + PostgreSQL:填充范围内缺失的日期

    我有一张表 其中一列为date 每个日期可以有多个条目 date 2015 07 20 2015 07 20 2015 07 23 2015 07 24 我想使用 Django ORM 和 PostgreSQL 作为数据库后端来获取以下形式
  • gcc 链接共享库与符号链接

    我有两个库 例如两个烤面包机库libtoaster a so and libtoaster b so以及所有相关的主要 次要 修订符号链接 例如libtoaster a so 1 0 0等等 这两个库都实现了相同的烤面包机接口 但只是进行了
  • 使用 R,循环数据帧,并为循环中创建的对象分配适当的名称

    这是数据分析师一直在做的事情 特别是在处理缺少响应的调查数据时 通常首先对一组完整的数据矩阵进行乘法插补 将模型拟合到每个矩阵 然后组合结果 目前我正在手工做事并寻找更优雅的解决方案 想象一下有 5 个 csv工作目录中的文件 名为dat1
  • 如何运行 Github 存储库?

    我是一个编码新手 所以这可能是一个愚蠢的问题 我正在做一个 SQL 项目来学习该语言 我想知道是否有办法下载并执行 Github 存储库 我以前没有使用过 Github 谢谢 如果你是新手 我认为你应该学习如何使用git 您可以参考以下链接
  • 詹金斯没有声纳​​运行选项?

    我正在寻找在我们的詹金斯服务器上安装 sonarQube 我能找到的文档告诉我在中配置声纳运行器 Jenkins gt manage Jenkins gt Configure system 但是那里没有 声纳跑步者 选项 有一个 声纳 选项
  • 从AWS lambda@edge访问原始URL

    我正在尝试使用 AWS Cloudfront 上的 lambda edge 实现多个网站的 代理 我的设置大致是 DNS domain com gt some uuid cloudfront net Cloudfront 分发 Cloudf
  • VIM 折叠头中的语法高亮显示

    有没有办法让 VIM 继续对用作折叠标题的行应用格式 例如 我有以下代码 int foo int a int b int c 折叠后 我看到 4 lines int foo int a int b 但是 根据 Folded 类 整行都会突出
  • MySQL - 我们可以按列位置而不是名称排序吗?

    我在谷歌上查看过但找不到它 我们可以在 MySQL 中使用字段的位置进行排序吗 假设我有字段ID FirstName LastName Age但我想按字段 4 排序 我可以这样做吗ORDER BY FieldPos4按年龄订购 我还没有找到
  • 在 C# 字符串/字符编码中,GetBytes()、GetString() 和 Convert() 之间有什么区别?

    我们在将 Unicode 字符串转换为 UTF 8 字符串以通过网络发送时遇到问题 Start with our unicode string string unicode Convert u10A0 Get an array of byt
  • DataGridView 滚动事件(和 ScrollEventType.EndScroll)

    交接时DataGridView Scroll事件 您可以检查是否是滚动结束 当用鼠标拖动滚动条时 这大概是在释放鼠标按钮时 问题是这似乎永远不会发生 e Type从来没有ScrollEventType EndScroll 这有什么问题吗 如
  • 如何避免 DOM 解析添加 html doctype、 和 标签? [复制]

    这个问题在这里已经有答案了