如何防止 PHP DOMDocument“修复”您的 HTML 字符串

2023-11-22

我一直在尝试使用 HTML DOM 对象来解析网页,以便将它们用于应用程序来扫描它们的 SEO 质量。

但是我遇到了一些问题。出于测试目的,我编写了一个小型 HTML 页面,其中包含以下不正确的 HTML:

<head>
<meta name="description" content="randomdesciption">
</head>
<title>sometitle</title>

正如您所看到的,标题位于 head 标签之外,这是我试图检测的错误。

现在问题来了,当我使用 cURL 捕获此页面的响应字符串,然后将其发送到 DOM 文档以将其加载为 HTML 时,它实际上通过添加另一个来修复此问题<head> and </head>标题周围的标签。

<head>
<meta name="description" content="randomdesciption">
</head>
<head><title>sometitle</title></head>

我检查了 cURL 响应数据,实际上这不是问题,不知何故 PHP DOMDocument 在执行 loadHTML() 方法期间修复了 html 语法。

我还尝试通过将 DOMDocument 恢复、替代实体和 validateOnParse 属性设置为 false 来关闭它们,但没有成功。

我一直在搜索谷歌,但到目前为止我无法找到任何答案。我想对于那些真正希望不修复损坏的 HTML 的人来说有点罕见。

有人知道如何防止 DOMDocument 修复损坏的 HTML 吗?


更新:从 PHP 5.4 开始,您可以使用HTML_PARSE_NO_IMPLIED

$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED);

原答案如下

你不能。理论上有一面旗帜HTML_PARSE_NO_IMPLIED对于 libxml 中的内容以防止添加隐含标记,但无法从 PHP 访问它。

顺便说一句,这种特殊的行为似乎取决于LIBXML_VERSION used.

运行这个片段:

<?php
$html = <<< HTML
<head>
<meta name="description" content="randomdesciption">
</head>
<title>sometitle</title>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html);
$dom->formatOutput = true;
echo $dom->saveHTML(), LIBXML_VERSION;

在我的机器上会给

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta name="description" content="randomdesciption"></head>
<title>sometitle</title>
</html>
20707
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 PHP DOMDocument“修复”您的 HTML 字符串 的相关文章

  • 通过 facebook graph API 检索 facebook 用户的邮政编码

    我正在尝试使用 facebook graph API 检索用户的邮政编码 我正在使用以下代码 代码在php ini中 facebook new Facebook array appId gt APP ID secret gt APP SEC
  • 在 HTML5 Javascript 中将 BlobBuilder 转换为字符串

    function blobToString blob var reader new FileReader var d reader onloadend function d callback reader result console lo
  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • 将 Google 信任徽章添加到 Magento

    我正在尝试将 Google Trust Badge 添加到我的 magento 商店 我尝试在 Magento 网站上搜索扩展程序 但找不到 我是否需要将以下代码粘贴到产品和结账页面 还是必须对其进行更改 如果有人能引导我走向正确的方向 我
  • Magento - 检查 cms 页面

    我想通过 php 检查页面是否是 Magento 中的 cms page 我需要不同的 cms 页面面包屑 所以我尝试在一个条件下做到这一点 但我不知道如何或在哪里查看 到目前为止 这是我的 breadcrumbs phtml p some
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • 使用php将数据存储到文本文件中?

    我正在尝试将数据存储在文本文件中 例如使用 php 将数组存储到文本文件中 而不是存储到 mysql 数据库中 例如 这里是要存储在文本文件中的数据 name gt john age gt 25 location gt australia
  • apache_request_headers() 与 $_SERVER

    据我所知 apache request headers 提供与以下相同的信息 SERVER 但按键略有不同 为什么有人应该使用apache request headers 而不仅仅是从那里获取这些信息 SERVER 我在 Centos 上使
  • 如何使用javascript确保元素仅在圆上朝一个方向移动?

    好吧 我承认我对三角学真的很糟糕 出于上下文的考虑 我将添加我在这里提到的问题中的内容 参考问题 https stackoverflow com a 39429290 168492 https stackoverflow com a 394
  • 两列表:一列尽可能小,另一列占据其余部分

    我在 div 中有一个 to columns 表 div table tbody tr td class action a a td td class content p Bigger text variable size p td tr
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 删除 IE9 边缘周围的 2px 灰色边框

    我正在尝试对这个网站进行编码 尝试关键字 并且我正在尝试找出如何删除这个阴影2px灰色边框延伸到 IE9 窗口的内部 至少顶部 左侧和底部 我的边距设置为零 因此所有页面元素都到达页面的最边缘 但使用 IE9 它们会停在这个灰色边框处 我没
  • 如何在 OS X 上使用 OpenSSL 1.0.1 编译 PHP 5.5.19

    我已经安装了 OpenSSL 1 0 1j usr local ssl现在我尝试使用此版本的 OpenSSL 编译 PHP 5 5 19 这是我的配置过程 export CFLAGS arch x86 64 export CXXFLAGS
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • PHP 数组通过 JSON 转为 jquery 数组

    我有点困惑为什么以下不起作用 get php
  • 如何始终将焦点保持在文本框中

    我创建了一个包含两个 div 的 HTML 页面 左侧的 div 页面的 90 是 ajax 结果的目标 右侧的 div 页面的 10 包含一个文本框 该页面的想法是在文本框中输入零件编号 通过条形码扫描仪 并显示与该零件编号匹配的绘图 显
  • 为什么我的交互式图像仅在 Internet Explorer 上出现故障?

    我的问题 我为自己制作了一个图像地图 交互式图像 它在 Chrome safari 和 Firefox 上完美运行 然而 当我在可怕的互联网浏览器上尝试它时 它真的很糟糕 这些小点应该扩展到更大的盒子中 在互联网浏览器上它要么不起作用 要么
  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int

随机推荐

  • “动态atexit析构函数”中的“动态”是什么意思?

    我最近将我的应用程序从 VC 7 移植到 VC 9 现在 它有时会在退出时崩溃 运行时开始调用全局对象析构函数 并且其中之一发生访问冲突 每当我观察调用堆栈时 最上面的函数是 CMyClass CMyClass lt crashes her
  • 如何在Python中使用回调函数?

    我想知道如何正确使用 python 2 7 回调函数 我的代码中有一些来自 Cherrypy auth 示例的回调函数 这些回调返回一个可以计算为 True 或 False 的函数 具体取决于登录用户是否在组中 我想知道如果我写这样一段代码
  • IIS6 中的 ASP.NET MVC 压缩选项

    目前我仍坚持使用 IIS6 for ASP NET MVC 如我还无法升级到 Server 2008 它似乎不知道我的 RESTful URL 是动态文件并且没有压缩它们 我所有旧的 aspx 文件都被压缩 如 Fiddler 中所示 但不
  • 在 vs 2010 中开箱即用运行 asp.net mvc 2 项目时出错

    我创建了一个新的解决方案 它构建了精细的定位框架 4 0 但是当我运行它时 我的浏览器会显示 无法找到该资源 描述 HTTP 404 您正在查找的资源 或其依赖项之一 可能已被删除 名称已更改或暂时不可用 请检查以下 URL 并确保拼写正确
  • c# 如何从日期中删除AM/PM

    我想获取今天的日期时间 但没有 AM PM DateTime dt DateTime Now 给我 23 05 2016 03 16 51 上午 我想要的结果是 2016年5月23日 15 16 51 The DateTime本身不保留任何
  • ASP.NET Core 中信任本地 HTTPs 证书时出现问题

    我正在按照在线教程创建 ASP NET Core Web 应用程序 我遵循了一切 但无法信任本地 HTTPS 证书 当我第一次运行该应用程序时 我收到一条错误消息 访问控制列表 acl 结构无效 我尝试用谷歌搜索此错误 但找不到与我的 AS
  • 使用 vbscript 创建 Excel 文件

    如何使用以下命令创建 Excel 文件VBScript 我搜索了网络 但它只提到打开现有文件 这是从网上提取的如下图 Set objExcel CreateObject Excel Application Set objWorkbook o
  • 是否可以中断 ExecutorService 的特定线程?

    如果我有一个ExecutorService我向其提供可运行任务 我可以选择一个并中断它吗 我知道我可以取消返回的未来 也提到这里 如何中断执行器线程 但是我怎样才能提高InterruptedException Cancel 似乎没有做到这一
  • 如何在 AsyncTask 中从 onPostExecute 发送回数据?

    我的问题与此相同Activity 的实例变量未在 AsyncTask 的 onPostExecute 中设置或如何将数据从 AsyncTask 返回到主 UI 线程但我想将数据发送回同一个调用活动 不启动意图的活动总是重新启动活动 一种选择
  • 读取 JPG 文件的 XMP 元数据

    我正在开发 Android 应用程序 该应用程序应该利用 Google 相机的新深度图生成功能 基本上谷歌已经描述了所使用的元数据here 我可以访问大部分元数据 但不幸的是 最重要的数据被编码为extendXmp 并且我无法获得任何XMP
  • sql server 将日期转换为字符串 MM/DD/YYYY

    我正在使用 SQL Server 2008 我有以下内容 select convert varchar 20 fmdate from Sery 如何将日期转换为字符串 使其显示为 MM DD YYYY 该任务应该由软件堆栈中的下一层来完成
  • 如何在 C++ 中编码大型复杂的常量数据结构

    过去 我使用过 gccC99 样式复合文字扩展到 C 来编码代码中的嵌套常量数据结构 这是一个例子 include
  • 获取文档中的所有链接

    给定 Google Docs Drive 中的 普通文档 例如段落 列表 表格 其中包含分散在整个内容中的外部链接 如何使用 Google Apps 脚本编译存在的链接列表 具体来说 我想通过搜索来更新文档中所有损坏的链接oldText在每
  • Instagram Instagram 标题不起作用

    我有以下用于在 Instagram 上分享文章的代码 void shareInstagram NSURL instagramURL NSURL URLWithString instagram app if UIApplication sha
  • 如何将外部 DOM 附加到 React 组件?

    我有一个页面 其中包含在服务器中呈现的表单 它处理验证以及选择的正确值 我想隐藏该表单的 DOM 并将其附加到 React 组件中 以便我可以在 React router 中使用它 const NewItem React createCla
  • UICollectionView 滚动很慢

    我刚刚创建了一个UICollectionView其中用户可以将手机中的图像添加到应用程序的相册功能中 我将图像保存到文档目录中的子目录中 以便可以添加和删除更多图像 但是 当我上下滚动集合视图时 它非常滞后 怎样才能让滚动条又漂亮又流畅呢
  • “点击恢复”暂停文本 SpriteKit

    我知道 SpriteKit 已经处理了当应用程序进入非活动状态时暂停游戏的问题 但我想做的是在应用程序重新进入活动状态时添加一个 SKLabelNode 点击恢复 现在它正在正确调用我的函数并暂停游戏 但文本没有显示 AppDelegate
  • 具有多个自变量的 Python curve_fit

    蟒蛇的curve fit计算具有单个自变量的函数的最佳拟合参数 但是有没有办法使用curve fit或者其他什么 以适应具有多个自变量的函数 例如 def func x y a b c return log a b log x c log
  • 如何检测实体 EntityState 的更改?

    我想在客户列表的每一行上放置一个 删除 按钮和一个 取消 按钮 当客户 未更改 时 取消 按钮将被禁用 但是 当客户转换到更改状态 已添加 已修改 已删除 时 我想启用 取消 按钮 以便用户可以在保存之前撤消更改 无论它们是什么 我几乎可以
  • 如何防止 PHP DOMDocument“修复”您的 HTML 字符串

    我一直在尝试使用 HTML DOM 对象来解析网页 以便将它们用于应用程序来扫描它们的 SEO 质量 但是我遇到了一些问题 出于测试目的 我编写了一个小型 HTML 页面 其中包含以下不正确的 HTML 正如您所看到的 标题位于 head