PHP“漂亮打印”HTML(不是 Tidy)

2024-01-24

我正在 PHP 中使用 DOM 扩展来构建一些 HTML 文档,并且我希望输出能够很好地格式化(使用换行符和缩进),以便它是可读的,但是,从我所做的许多测试来看:

  1. “formatOutput = true”根本不适用于 saveHTML(),仅适用于 saveXML()
  2. 即使我使用了 saveXML(),它仍然只适用于通过 DOM 创建的元素,而不适用于 loadHTML() 中包含的元素,即使使用“preserveWhiteSpace = false”

如果有人有不同的了解,我真的很想知道他们是如何让它发挥作用的。

因此,我有一个 DOM 文档,并且使用 saveHTML() 来输出 HTML。由于它来自 DOM,我知道它是有效的,因此不需要“整理”或以任何方式验证它。

我只是在寻找一种方法,从 DOM 扩展收到的输出中获取格式良好的输出。

注意。正如您可能已经猜到的,我不想使用 Tidy 扩展,因为 a) 它做了很多我需要的事情(标记已经有效),b) 它实际上对 HTML 内容进行了更改(例如HTML 5 文档类型和一些元素)。

跟进:

好的,在下面的答案的帮助下,我已经弄清楚了 DOM 扩展不起作用的原因。尽管给定的示例有效,但它仍然不适用于我的代码。在...的帮助下this https://www.php.net/manual/en/domdocument.savexml.php#76867我发现,如果您有任何文本节点,其中 isWhitespaceInElementContent() 为 true,则不会应用超出该点的格式。无论preserveWhiteSpace 是否为假,都会发生这种情况。解决方案是删除所有这些节点(尽管我不确定这是否会对实际内容产生不利影响)。


你是对的,HTML 似乎没有缩进(其他人也很困惑 http://bugs.php.net/bug.php?id=27783)。即使加载了代码,XML 也能工作。

<?php
function tidyHTML($buffer) {
    // load our document into a DOM object
    $dom = new DOMDocument();
    // we want nice output
    $dom->preserveWhiteSpace = false;
    $dom->loadHTML($buffer);
    $dom->formatOutput = true;
    return($dom->saveHTML());
}

// start output buffering, using our nice
// callback function to format the output.
ob_start("tidyHTML");

?>
<html>
    <head>
    <title>foo bar</title><meta name="bar" value="foo"><body><h1>bar foo</h1><p>It's like comparing apples to oranges.</p></body></html>
<?php
// this will be called implicitly, but we'll
// call it manually to illustrate the point.
ob_end_flush();
?>

result:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>foo bar</title>
<meta name="bar" value="foo">
</head>
<body>
<h1>bar foo</h1>
<p>It's like comparing apples to oranges.</p>
</body>
</html>

与 saveXML() 相同...

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
  <head>
    <title>foo bar</title>
    <meta name="bar" value="foo"/>
  </head>
  <body>
    <h1>bar foo</h1>
    <p>It's like comparing apples to oranges.</p>
  </body>
</html>

可能忘记在 loadHTML 之前设置preserveWhiteSpace=false?

免责声明:我窃取了大部分演示代码tyson clugg/php 手册注释 http://www.php.net/manual/en/domdocument.savehtml.php#52139。懒惰的我。


UPDATE:我现在记得几年前我尝试过同样的事情并遇到了同样的问题。我通过应用一个肮脏的解决方法解决了这个问题(不是性能关键):我只是以某种方式在 SimpleXML 和 DOM 之间进行转换,直到问题消失。我想转换摆脱了这些节点。也许加载 dom,导入simplexml_import_dom,然后输出字符串,再次用 DOM 解析它并then打印得很漂亮。据我记得这有效(但它是really slow).

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

PHP“漂亮打印”HTML(不是 Tidy) 的相关文章

  • 多语言标记验证器

    是否有免费的在线多语言标记验证服务可以正确识别和验证多语言标记 我确实找到了totalvalidator和htmlvalidator 但这些是 付费 非基于网络的解决方案 Use http validator w3 org nu http
  • 使用 python 在一个 html 页面中显示分割数据框的 HTML 代码

    我是 html css 新手 所以对以 html 格式显示的数据有疑问 我有一个很长的列表 我想将其拆分并以 html 格式显示为两个单独的列 例如 而不是 Col1 Col2 1 a 2 a 3 a 4 a 5 b 6 b 7 b 8 b
  • 在 Angular html 模板中访问常量枚举

    假设我有一个常量枚举 export const enum MyConstEnum Value1 Value1 Value2 Value2 Value3 Value3 现在我想在我的 Angular 模板中使用它 span This has
  • 无法使用 BeautifulSoup4 (Python 3) 抓取特定表

    我想从 Ligue 1 足球网站上抓取一张表格 具体来说 该表包含有关卡片和裁判的信息 http www ligue1 com LFPStats stats arbitre competition D1 http www ligue1 co
  • VBA 完成 Internet 表单

    我正在寻找将 Excel 中的值放入网页的代码 Sub FillInternetForm Dim IE As Object Set IE CreateObject InternetExplorer Application IE naviga
  • 如何使用 Twig 的属性函数访问嵌套对象属性

    我试图使用一个树枝变量来访问另一个树枝变量的属性 直到我找到 属性 函数为止 该变量才起作用 除了需要访问嵌套属性的情况外 效果很好 当包含属性的变量实际上是对象 属性时 它不起作用 例如 attribute object1 variabl
  • 使用本地存储在从另一个表保存的 HTML TABLE 中打印 JSON,以便我在另一个页面上打印我的表

    在我的作业中 我必须使用用户输入中的数据并将数据保存在本地存储中 我必须以水平表格式将这些数据从本地存储打印到其他页面 为此 我编写了用于用户输入并将数据保存在本地存储中的代码 div p p div
  • html 电子邮件内的背景图像 css - Gmail 不支持

    我想向我的用户发送如下所示的带有背景图像 css 的 html 正文电子邮件 div style width 500px height 1000px background color black background image none
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • 将 Google 信任徽章添加到 Magento

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

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • 语法错误,第 288 行出现意外的“endif”(T_ENDIF)[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我一直在离线处理我的 WordPress 网站的此代码错误 解析错误 语法错误 homez 541 photoher marie
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • Sonata DateTimePickerType 类默认日期显示错误的日期时间格式

    我陷入困境 我不知道如何使用 sonata DateTimePickerType 类正确设置默认日期和时间 我尝试了不同的方法 但到目前为止 没有一种方法没有帮助 在下面的截图中 help 键显示正确的日期和时间 但是当我使用 dp 默认日
  • 使用 JavaScript 移动页面上的按钮

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

    我有点困惑为什么以下不起作用 get php
  • 从数据库填充复选框

    我有两个表 第一个由与名称关联的 id 组成 1 汽车 2 火车 3 普通 ETC 第二个表由两个字段 user id 和第一个表中的 id 组成 例如 1 1 2 1 3 当用户转到该页面时 我试图重新填充选定的复选框 首先 您查询数据库
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • 使用 CSS 折叠和展开元素

    我正在尝试构建一个页面 加载时仅可见标题 并且 当用户单击标题时 每个标题下方的表格会在隐藏和显示状态之间切换 我的限制是只能在 CSS 中执行此操作 这是我到目前为止想到的 https jsfiddle net Argoron c1ypx
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad

随机推荐

  • scala 线程安全 HashSet

    使 HashSet 线程安全的可能方法是什么 看到了一些样本 如下所示 var test new mutable HashSet Long with mutable SynchronizedSet Long SynchronizedSet
  • 如何在 UILabel 中使字符等宽

    我使用时遇到问题UILabel 我这里有两个标签 上图 它们具有相同的字体和相同的宽度 textAlignment都是左边的 它们都有10个字符 但是每个字符都有不同的宽度 所以它不能一一对齐 我正在尝试动态添加间距但我未能做到这一点 那么
  • 无法从 git.gnome.org 克隆

    我正在使用 Ubuntu 操作系统 我尝试从 git gnome org 克隆几个存储库 例如 git clone git git gnome org newcomers tutorial Cloning into newcomers tu
  • 如何检查用户是否属于AD组?

    起初我认为下面的代码有效 因为如果我将组设置为 IT 它就会正常工作 因为我的用户名位于活动目录中的 IT 组中 我了解到的是 无论我的用户名是否在 IT 组中 它总是返回 true 如果我将其更改为我所在的任何其他组 它总是返回 fals
  • 是否可以将块定义为类的成员?

    我正在尝试在 Objective C 中实现一个非常简单的策略类 它允许内联定义策略而不是通过继承定义策略 目前我的代码如下所示 interface SSTaskStrategy NSObject NSArray strategy void
  • 如何使用 ggplot2 堆积条上的误差线

    I m struggling to put error bars into the correct place on a stacked bar As I read on an earlier post I used ddply in or
  • 如何使用 Node.js 提供图像

    我有一个徽标位于public images logo gif 这是我的nodejs代码 http createServer function req res res writeHead 200 Content Type text plain
  • 如何用 Amazon S3 替换 PHP imagecopyresampled?

    我正在使用jquery文件上传 http blueimp github io jQuery File Upload 脚本并已成功将主图像上传到 Amazon S3 我现在尝试更换多个图像尺寸以上传到 S3 中的子文件夹或对象 在 的里面创建
  • Spring boot - 登录后返回用户对象

    我有一个 Spring Boot 应用程序 其 WebSecurityConfigurerAdapter 配置如下 http csrf disable exceptionHandling authenticationEntryPoint r
  • 当同时有多个请求时,Redis 不会更新

    我有一个 Node js 应用程序 我正在尝试使用 Redis 缓存来记录发出的请求量 这只是一个概念证明 旨在了解 Redis 是否是适合我的工具 但我对结果有点失望 我想知道 Redis 是否只是性能非常糟糕 或者我的代码是否存在缺陷
  • 在 Laravel 之外使用 Laravel Facade

    我有一个 Laravel 应用程序 我将其用作 Joomla 中构建的更大应用程序的 API 我真的很喜欢使用 Laravel 并决定在 Joomla 应用程序中使用 Eloquent 我通过导入来实现这个工作bootstrap autol
  • pymc3中的多元线性回归

    我最近开始学习pymc3专门使用后emcee多年来 我遇到了一些概念问题 我正在练习第七章霍格的数据拟合模型 https arxiv org abs 1008 4686 这涉及到具有任意二维不确定性的直线的 mcmc 拟合 我很容易地完成了
  • g++“没有调用错误的匹配函数”

    我有A级 template
  • 为什么内联构造函数和析构函数在 C++ 中不是一个好主意?

    我记得在一本 C 书籍中读过 很久以前 使用内联构造函数和析构函数并不是一个好主意 尤其是对于派生类 我知道内联会导致对象代码膨胀 但是是否有其他设计考虑因素会阻止内联构造函数和析构函数 当然 大多数编译器可能会拒绝内联并继续创建函数体 但
  • NEO4J Cypher 查询:Where 子句中的关系方向错误

    样本数据 示例查询 CREATE a1 A title a1 CREATE a2 A title a2 CREATE a3 A title a3 CREATE b1 B title b1 CREATE b2 B title b2 MATCH
  • gitignore 递归行为在哪里指定?

    参考在线文档 http git scm com docs gitignore 如果模式不包含斜杠 Git 会将其视为 shell glob 模式 并检查相对于 gitignore 文件位置的路径名是否匹配 如果不是来自 gitignore
  • 随机 Python 字典键,按值加权

    我有一本字典 其中每个键都有一个可变长度的列表 例如 d a 1 3 2 b 6 c 0 0 有没有一种干净的方法来获取随机字典键 并按其值的长度加权 random choice d keys 会对键进 行同等的权重 但在上面的情况下我想要
  • “dapper-dot-net”中的交易

    如果我的 DAL 使用 dapper dot net 如何创建交易 我的 C winform 应用程序将在网络中使用 数据将保存到中央 SQL 服务器 我的用例需要使用事务 我可以使用 dapper 来完成此操作 还是需要使用 NHiber
  • Facebook iOS - 检查我的 Facebook 应用程序是否已获得授权

    我的问题是如何检查我的 Facebook 应用程序是否已被用户授权发帖 但找不到任何相关信息 我在用着 Facebook facebook Facebook alloc initWithAppId 1234567 facebook auth
  • PHP“漂亮打印”HTML(不是 Tidy)

    我正在 PHP 中使用 DOM 扩展来构建一些 HTML 文档 并且我希望输出能够很好地格式化 使用换行符和缩进 以便它是可读的 但是 从我所做的许多测试来看 formatOutput true 根本不适用于 saveHTML 仅适用于 s