2009-09-13 9 views
8

Dans mon HTML, j'ai un script PHP qui inclut un fichier. À ce stade, le code est indenté 2 onglets. Ce que je voudrais faire, c'est que le script php ajoute deux onglets à chaque ligne. Voici un exemple:Comment puis-je faire un script php ajouter un onglet à chaque ligne d'un fichier include?

Page principale:

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

Et "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> 

Ce que je reçois:

<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> 

Ce que je veux:

<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> 

Je réalise que je pourrais juste ajouter des onglets principaux au fichier d'inclusion. Cependant, VS continue de supprimer ceux lorsque je formate le document.

Répondre

6

Dans votre fichier test.inc, vous pouvez utiliser output buffering pour capturer toutes les sorties du script PHP, avant qu'il ne soit envoyé au navigateur. Vous pouvez ensuite le post-traiter pour ajouter les onglets souhaités et l'envoyer. En haut sur le fichier, ajoutez

<?php 
    ob_start(); 
?> 

A la fin, ajouter

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

Je ne souscris pas nécessairement à cette solution - il peut être gourmand en mémoire, en fonction de votre sortie, et sera empêcher votre fichier include d'envoyer des résultats partiels au client pendant qu'il fonctionne. Il vaudrait peut-être mieux reformater la sortie, ou utiliser une forme de wrapper "print" personnalisée qui tabule les choses (et utilise l'impression de heredocs pour une sortie HTML constante).

Edit: Utilisez str_replace, comme suggéré par commentaire

+2

+1 Mais de même, je ne vois vraiment pas l'intérêt d'ajouter les TAB supplémentaires. Ils ne contribuent pas du tout au résultat final, et prennent juste plus de place dans le rendu HTML final. –

+4

Veuillez ne pas utiliser 'preg_replace()' pour cela, 'str_replace()' est absolument suffisant. – soulmerge

+4

Je pense que vous vouliez dire 'echo str_replace (" \ n "," \ t \ n "," \ t ". $ Result)', mais cela m'a toujours été d'une aide précieuse. – William

0

La solution la plus simple consiste à ajouter des onglets principaux au fichier d'inclusion, mais au lieu d'utiliser des onglets littéraux, utilisez la séquence d'échappement \t.

1

Je ne pense pas que votre solution peut se faire facilement. Vous pouvez envisager d'utiliser HTML Tidy pour nettoyer votre code source avant de le présenter à un client. Il y a good tutorials pour cela sur internet.

+0

'ob_start ('ob_tidyhandler')' en haut de votre fichier devrait être tout ce dont vous avez besoin. Je ne recommanderais pas l'activer, lors du débogage, cependant. – soulmerge

Questions connexes