8

HTML内に、ファイルを含むphpスクリプトがあります。その時点で、コードは2つのタブにインデントされます。私がやりたいのは、phpスクリプトに各行に2つのタブを追加させることです。次に例を示します。

メインページ:

<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はそれらを削除し続けます。

4

3 に答える 3

6

test.incファイルでは、出力バッファリングを使用して、ブラウザに送信される前にPHPスクリプトのすべての出力をキャプチャできます。その後、後処理して必要なタブを追加し、送信することができます。ファイルの上部に次のように追加します

<?php
  ob_start();
?>

最後に、

<?php
  $result = ob_get_contents();
  ob_end_clean();
  print str_replace("\t" . $result, "\n", "\n\t");
?>

私は必ずしもこのソリューションにサブスクライブしているわけではありません-出力によってはメモリを大量に消費する可能性があり、インクルードファイルが機能するときに部分的な結果をクライアントに送信できなくなります。出力を再フォーマットするか、タブを付けるカスタムの「印刷」ラッパーを使用する方がよい場合があります(そして、一定のHTML出力にはヒアドキュメントの印刷を使用します)。

編集:コメントで提案されているように、str_replaceを使用します

于 2009-09-13T15:35:08.147 に答える
1

私はあなたの解決策が簡単にできるとは思いません。クライアントに提示する前に、 HTMLTidyを使用してソースコードをクリーンアップすることを検討してください。インターネット上にそれのための良いチュートリアルがあります。

于 2009-09-13T15:36:00.550 に答える
0

最も簡単な解決策は、インクルードファイルに先頭のタブを追加することですが、リテラルタブを使用する代わりに、\tエスケープシーケンスを使用します。

于 2009-09-13T15:34:17.103 に答える