2009-09-13 9 views
8

W moim kodzie HTML mam skrypt php zawierający plik. W tym momencie kod jest wcięty w 2 zakładki. Chciałbym, aby skrypt php dodał dwie zakładki do każdej linii. Oto przykład:Jak mogę utworzyć skrypt php dodać kartę do każdego wiersza pliku włączającego?

Strona główna:

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

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

Co dostaję:

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

Czego chcę:

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

Zdaję sobie sprawę, że mogłem po prostu dodać wiodące karty do pliku dołączanego. Jednak VS usuwa je podczas formatowania dokumentu.

Odpowiedz

6

W pliku test.inc można użyć output buffering do przechwycenia wszystkich danych wyjściowych skryptu PHP, zanim zostanie on wysłany do przeglądarki. Następnie możesz je przetworzyć, aby dodać wymagane karty i wysłać je. Na górze na plik, dodać

<?php 
    ob_start(); 
?> 

Na koniec dodać

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

nie koniecznie zapisz się do tego rozwiązania - może to być pamięć intensywny, w zależności od mocy i woli zapobiec wysyłaniu przez twój plik włączający częściowych wyników do klienta, tak jak to działa. Lepszym wyjściem może być ponowne sformatowanie danych wyjściowych lub użycie niestandardowej opcji "drukowania", która powoduje zapisywanie elementów (i drukowanie w postaci stałej heredocs).

Edit: Użyj str_replace, jak sugeruje komentarzu

+2

+1 Ale tak naprawdę nie widzę sensu w dodawaniu dodatkowych TAB-ów. Po prostu w żaden sposób nie przyczyniają się do końcowego wyniku, a zajmują więcej miejsca w ostatecznym renderowanym kodzie HTML. –

+4

Nie używaj 'preg_replace()' do tego, 'str_replace()' jest absolutnie wystarczające. – soulmerge

+4

Myślę, że chodziło o 'echo str_replace (" \ n "," \ t \ n "," \ t ". $ Result)', ale nadal było to dla mnie niezwykle pomocne. – William

0

Najprostszym rozwiązaniem jest dodanie wiodących zakładek do pliku włączania, ale zamiast używać literalnych kart, należy użyć sekwencji specjalnej \t.

1

Nie sądzę rozwiązanie można łatwo zrobić. Możesz rozważyć użycie HTML Tidy do oczyszczenia kodu źródłowego przed zaprezentowaniem go klientowi. W Internecie jest good tutorials.

+0

'ob_start ('ob_tidyhandler')' u góry pliku powinno być wszystkim, czego potrzebujesz. Nie zaleca się jednak włączania go podczas debugowania. – soulmerge