【问题标题】:Is it possibly to automatically indent HTML source outputted by PHP? [duplicate]是否可以自动缩进 PHP 输出的 HTML 源代码? [复制]
【发布时间】:2014-08-27 04:14:06
【问题描述】:

作为一个完美主义者,我喜欢 PHP 输出有效且正确缩进的 HTML。

我有一些具有 IT 意识的用户的复杂 web 应用程序,他们希望能够查看源代码而不是乱码。

目前我使用我写的这个函数:

function nl($tabs = 0)
{
    return "\r\n" . str_repeat("\t", $tabs);
}

像这样使用它来添加换行符和所需的制表符数:

if(array_key_exists('field', $row)){
    echo '<td>' . $row['field'] . '</td>' . nl(4);
}

PHP 有什么内置的东西,或者有一个类可以用来自动执行缩进吗?

【问题讨论】:

  • 在过去拥有可读的 HTML 是编写者的工作,现在这是由浏览器使用 Firebug 或 Chrome 的开发者工具等工具自动完成的。你应该专注于让你的 PHP 可读而不是输出(HTML)。
  • @panther Trollololol,因为 Linux 仍然是网络之王(并且无需支付许可费)。我在请求/需要的地方使用 .NET,但它通常是需要的开源代码。
  • @DannyBeckett:你的浏览器没有源代码的美化按钮吗?这样就省去了编写所有那些毫无意义(在你的情况下是有缺陷的)缩进函数的麻烦。我的意思是有缺陷的,例如return "\r\n" 应该是return PHP_EOL
  • 我不会那样做,但你可以将你的 html 收集到一个变量中(或通过 output_buffering)并在回显之前对其进行解析。
  • 也许你可以编写像'openTag'、'closeTag'和writeContent这样的函数。前两个可以增加和减少缩进计数器。但是这样做意味着有很多额外的函数调用,可能会导致页面稍微变慢。此外,并非所有 HTML 标记(与 XML 不同)都需要关闭,因此可能会打乱您的缩进。

标签: php html indentation auto-indent view-source


【解决方案1】:

使用输出缓冲区时,您可以使用 DOMDocument 并将 formatOutput 设置为 true,然后再将缓冲区刷新到客户端/浏览器。

即:

libxml_use_internal_errors( TRUE );

$dom = new DOMDocument();
$dom->validateOnParse = FALSE;
$dom->preserveWhiteSpace = TRUE;
$dom->formatOutput = TRUE;
$om->loadHTML( mb_convert_encoding( ob_get_contents(), 'UTF-8' ) );

libxml_clear_errors();

/*
 perform any other operations on dom elements you wish
*/

$buffer = $dom->saveHTML();
ob_end_clean();
echo trim( $buffer );/* send data to client/browser */

【讨论】:

  • 好答案。坏主意。
  • @SverriM.Olsen 这个特殊的网络应用程序是大量数据驱动的,能够查看源代码(可读)有时非常有用。
  • @DannyBeckett 格式化输出只会降低网站速度。这不关我的事,但你至少可以让它成为可选的。使用 GET 变量作为“开关”,例如 ?format_output=true,可能是一个想法。
  • @SverriM.Olsen 这是个好主意。无论如何,IT 员工都有一个特定的会话变量集,与其他工作单位的员工不同。
  • @RamRaider 使用KISS原理,在客户端用一行代码就可以了。
猜你喜欢
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2010-12-28
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多