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) 的相关文章

  • 回显 HTML 并内置 PHP

    请帮助我使用 echo 与 HTML 和 PHP 使用数组范围将其转换为动态
  • 在 Laravel 5.4 中选择下拉列表的选定值

    我有一个名为 名称 的下拉列表 用户将在其中选择其中一个 提交后 如果出现一些错误 那么我想选择所选的名称 我在 laravel 5 4 中使用它 控制器 info DB table designation gt where status
  • PHP 特性 - 定义通用常量

    定义可由命名空间内的多个类使用的常量的最佳方法是什么 我试图避免过多的继承 因此扩展基类不是理想的解决方案 并且我正在努力寻找使用特征的良好解决方案 这在 PHP 5 4 中是否可行 或者应该采取不同的方法 我有以下情况 trait Bas
  • PHP Imagick - “-量化透明”等效项

    是否有 PHP Imagick 等效项 quantize transparent 量化透明使用示例 http www imagemagick org Usage quantize color trans注意 在页面中搜索 量化透明 Quan
  • dompdf 在文档末尾插入空白页

    我正在使用 dompdf 0 6 0 生成 pdf 文档 并且遇到一个奇怪的问题 即最后创建了一个空白页面 我的 简化的 html
  • 递归替换多维数组中特定键每次出现的值

    我有一个数组 其数组深度可能会有所不同 例如 array one gt array array something gt value array something2 gt value2 another gt anothervalue tw
  • 突出显示 Html 文档中不同标签的文本

    我是新来的角js 现在我正在突出显示 HTML 文档中的文本 So 我的代码是这样的 var InstantSearch highlight function container highlightText var internalHigh
  • 撇号 php 问题

    我正在做一项涉及喊话箱的学校作业 一个很棒的教程 它使用 jquery ajax mysql 和 php 现在我遇到了以下句子的一个小问题 result li strong row user strong img src alt row m
  • jQuery 无法在外部 JavaScript 中工作

    我是 jQuery 新手 遇到了一些奇怪的问题 我正在使用 jQuery 的change and click方法 在我的 HTML 文件中使用时它们工作正常
  • 如何在 HTML5/CSS3 中将视口锁定为纵向方向

    是否可以在移动设备上将视图端口的方向锁定为纵向 我用谷歌搜索了它 但无法找到确切的操作方法 这个技巧应该有效 media screen and orientation landscape html Rotate the content co
  • Video.js - 阻止点击播放功能

    我正在使用 video js 将视频嵌入到 HTML 页面中 它将用作仅适用于 ipad 的 Web 应用程序 因此我相信它使用的是本机 HTML5 播放器 我正在尝试禁用点击播放功能 以便用户必须使用控件 但我在这样做时遇到了麻烦 我尝试
  • 有什么特别好的理由在 javascript 目标链接上继续使用 href='#' 吗?

    众所周知 像这样的代码是非常常见的 a href class edit Edit a 然后将其连接到事件处理程序 使用 jQuery 或当今流行的任何东西 甚至使用内联 js 处理程序 a href Edit a 我知道这是在链接上显示指针
  • PHP根据给定索引的匹配值合并数组[重复]

    这个问题在这里已经有答案了 我有两个这样的数组 Array1 Array 0 gt Array ID gt 101 Code gt 1075 Date gt 2012 03 03 17 13 12 433 1 gt Array ID gt
  • 元素上的框阴影行为

    Update 在我提交错误报告后 https bugs chromium org p chromium issues detail id 763337 https bugs chromium org p chromium issues de
  • 在 JavaScript 中引用 C# 变量

    我已经阅读了很多线程 但我不明白为什么这不起作用 我正在创建一个将用作导航栏的 SharePoint Web 部件 一切都很顺利 直到我尝试在 JS 代码中引用 C 变量 这是来自 VisualWebPart1UserControl asc
  • 使用 PHP 比较两个字符串的相似度

    嘿伙计们 我想寻求一些解决方案 现在我有字典了单词 txt 这里有一些例子 happy laugh sad 我有俚语字符串 hppy 我想要搜索和匹配那个俚语字符串我的字典这意味着它将返回 happy 因为这些字符串参考 快乐 in 字典
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 使用 MailTo 链接,我可以向发件人发送副本吗?

    我们开发了一个非常简单的表单 一旦提交 就会填充一封电子邮件以发送支持票证 这些电子邮件目前发送给我们的 支持人员 但如果我们也能向发件人发送一份副本 那就更理想了 我们正在使用 mailto 链接 这可能吗 例如 我们的员工 Brad 填
  • PHP Soap Server:使用字符串(xml 字符串)而不是 WSDL 文件(指向它的 url)实例化

    Soap Server的PHP页面 我见过 http www php net manual en soapserver soapserver php http www php net manual en soapserver soapser
  • 为什么-标签没有关闭

    这是一个普遍问题 我的教授都无法回答 为什么我不必关闭 HTML 中的标签 所有其他标签都必须关闭 例如 or 那么为什么不呢 首先 它根本不是一个标签 在名义上基于 SGML 或 XML 的 HTML 版本中 它是文件类型声明 它具有在

随机推荐

  • 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