如何让一个php脚本在包含的文件的每一行末尾添加一个制表符?

8

在我的HTML文件中,我有一个包含文件的php脚本。此时,代码缩进了2个制表符。我想做的是让php脚本每行都添加两个制表符。以下是示例:

主页面:

<body>
    <div>
        <?php include("test.inc"); ?>
    </div>
</body>

还有"test.inc":

<p>This is a test</p>
<div>
    <p>This is a nested test</p>
    <div>
        <p>This is an more nested test</p>
    </div>
</div>

我能提供的内容:

<body>
    <div>
<p>This is a test</p>
<div>
    <p>This is a nested test</p>
    <div>
        <p>This is an more nested test</p>
    </div>
</div>
    </div>
</body>

我想要的是:

<body>
    <div>
     <p>This is a test</p>
     <div>
            <p>This is a nested test</p>
            <div>
                <p>This is an more nested test</p>
            </div>
        </div>
    </div>
</body>

我意识到我可以向包含文件添加前导制表符。但是,当我对文档进行格式化时,VS会将它们删除。

3个回答

6
在你的test.inc文件中,你可以使用输出缓冲来捕获PHP脚本的所有输出,在发送到浏览器之前。然后,您可以进行后处理以添加所需的选项卡,并将其发送出去。在文件顶部添加即可。
<?php
  ob_start();
?>

在结尾处添加。
<?php
  $result = ob_get_contents();
  ob_end_clean();
  print str_replace("\t" . $result, "\n", "\n\t");
?>

我不一定赞同这个解决方案 - 它可能会消耗大量内存,具体取决于您的输出,并且会阻止包含文件在工作时向客户端发送部分结果。您最好重新格式化输出,或使用某种自定义的“打印”包装器来制表(并使用heredocs打印常量HTML输出)。

编辑:如评论所建议,使用str_replace。


2
+1 但是同样地,我真的不明白为什么要添加额外的TAB。它们根本没有对最终结果产生任何贡献,只会在最终渲染的HTML中占用更多的空间。 - Mike Dinescu
4
请不要使用 preg_replace(),使用 str_replace() 就足够了。 - soulmerge
4
жИСиЃ§дЄЇдљ†зЪДжДПжАЭжШѓ echo str_replace("\n", "\t\n", "\t".$result)пЉМдљЖињЩдїНзДґеѓєжИСйЭЮеЄЄжЬЙеЄЃеК©гАВ - Lime

1

我认为你的解决方案不容易实现。在向客户展示源代码之前,您可以考虑使用HTML Tidy来清理它。互联网上有很好的教程


在文件顶部加上ob_start('ob_tidyhandler')应该就足够了。不过在调试时,我不建议启用它。 - soulmerge

0

最简单的解决方案是在包含文件中添加前导制表符,但不要使用字面制表符,而是使用\t转义序列。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接