当前位置: 首页 > 面试题库 >

PHP“漂亮打印” HTML(非整洁)

孙和安
2023-03-14
问题内容

我使用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扩展无法正常工作。尽管给定的示例有效,但仍无法与我的代码一起使用。在此评论的帮助下,我发现,如果您有isWhitespaceInElementContent()为true的任何文本节点,则超出该点将不应用任何格式。无论preserveWhiteSpace是否为false,都会发生这种情况。解决方案是删除所有这些节点(尽管我不确定这是否会对实际内容产生不利影响)。


问题答案:

没错,HTML似乎没有缩进(其他人也很困惑)。即使加载了代码,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();
?>

结果:

<!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手册注释中
窃取了大多数演示代码。懒我

更新:
我现在记得几年前,我尝试过同样的事情,遇到了同样的问题。我通过应用一种肮脏的解决方法(对性能要求不高)解决了这个问题:我只是以某种方式在SimpleXML和DOM之间转换,直到问题消失。我想转换摆脱了那些节点。也许用dom加载,用导入simplexml_import_dom,然后输出字符串,再次用DOM解析它,
然后 漂亮地打印出来。据我记得这工作(但它 真的很 慢)。



 类似资料:
  • 问题内容: 我正在创建一个JSON文件的脚本。现在,我只是使用(PHP 5.2.x)将数组编码为JSON输出。然后,我将返回值打印到文件中并保存。问题是客户端希望能够打开这些JSON文件以提高可读性,因此我想在其中添加换行符并“漂亮打印” JSON输出。有关如何执行此操作的任何想法?我唯一可以看到的替代方法是完全不使用,而只是手动写入文件内容,并为每行添加自己的换行符。 这是我得到的: 这就是我想

  • 问题内容: 我正在构建一个PHP脚本,该脚本将JSON数据提供给另一个脚本。我的脚本将数据构建到一个大的关联数组中,然后使用来输出数据。这是一个示例脚本: 上面的代码产生以下输出: 如果您的数据量很少,那就太好了,但是我希望遵循以下几点: 有没有办法在PHP中做到这一点而又没有丑陋的破解?似乎有人在Facebook上找到了答案。 问题答案: PHP 5.4提供了用于调用的选项。 http://ph

  • 下面是我的例子: 如何为JSONARRAY启用漂亮的打印? 我认为这足以解释我的问题,但是这里有一些bla bla bla bla bla bla因为stackoverflow问我更多的细节,让我发布问题。

  • 现在我有一个的实例,希望得到一个具有漂亮JSON的。我在谷歌搜索的所有结果都显示了Jackson1.x的实现方法,而我似乎找不到合适的、不受反对的2.2实现方法。尽管我不认为代码对于这个问题是绝对必要的,但下面是我现在掌握的:

  • 问题内容: 如果有人对JSON的打印非常了解,那么我将不胜感激! 我正在使用以下功能将JSON字符串移动到文件中,以将复杂的python字符串转换为JSON格式: 问题是我遇到了方括号的语法错误,因为这对我来说是个新话题,我不知道该如何解决。我需要的JSON格式如下: 我正在使用Google Visualization API,您可能对此比较熟悉,但是我需要动态图。上面的代码是API创建图形所需的

  • 问题内容: 我正在尝试使用javax.json API漂亮地打印json 我当前使用的代码如下: 我收到以下异常: 问题答案: 您应该使用JsonWriter而不是JsonGenerator。 替换这些行: 用这些: