joeker
Goto Top

php-Datei auslesen und formatiert ausgeben

Hallo nochmal,

ich hatte vorgehabt, bestimmte php-Codedateien auszulesen und in einem DIV-Container auszugeben, damit die User den Quellcode eines php-Programms einlesen können.
Mit den folgenden Code lese ich die Datei ein:

$arr_file = file($file);
foreach($arr_file as $line)	{
    $output .= sprintf(" %s <br />", $line);  
}

Um die Kommentare übersichtlich darzustellen, habe ich diese mithilfe von "preg_replace()" ausformatiert:

$line = preg_replace("/^(\/\/)\s(.*)$/U", "<span style=\"color:#003151; font-weight:bold\">\\1 \\2</span>", htmlentities($line)); 

Und nun zum Problem: Wie bekomme ich die Whitespaces ausgegeben. In der Original-Datei befinden sich sämtliche Einrückungen, die im Browser leider nicht ausgegeben werden.
Mein Versuch:

$line = str_replace(" ", "&nbsp;", $line);  

Geht leider nur für die erste Zeile; der Rest bleibt gleich. Habt ihr viellciht eine Idee?

Content-Key: 103578

Url: https://administrator.de/contentid/103578

Printed on: April 25, 2024 at 14:04 o'clock

Member: Arano
Arano Dec 08, 2008 at 17:18:02 (UTC)
Goto Top
Schau dir doch mal PHP-Manual - highlight_string() und PHP-Manual highlight_file() an, die nehmen dir die ganze Arbeit ab :wink:

~Arano
Member: joeker
joeker Dec 09, 2008 at 14:04:49 (UTC)
Goto Top
Ja, ok haste recht.
Aber das löst mein Problem auch nicht, dass die Leerzeichen alle angezeigt werden.
Haste vielleicht da eine Idee?
Member: Arano
Arano Dec 09, 2008 at 14:56:08 (UTC)
Goto Top
Hm... hab mir mal was gebastelt, und da funktioniert es - wie erwartet.

php.php - auszugebenes PHP
<?php
 // ein kommentarchen
 echo 'Ein echo.. HALLOOOO ECHOOOO ;)';  
 $zahl=145;
 if(isset($zahl)&&$zahl==145){
  echo 'Oho, ein Hellseher'  
 }
?>
index.php - die verarbeitende datei
<?php

 $datei=file('./php.php');  
 $oput='';  
 foreach($datei as $zeile)
  $oput.=$zeile;
 
 highlight_string($oput);

?>
ausgabe
<span style="color: #000000">  
<span style="color: #0000BB">&lt;?php  
<br />&nbsp;</span><span style="color: #FF8000">//&nbsp;ein&nbsp;kommentarchen  
<br />&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'Ein&nbsp;echo..&nbsp;HALLOOOO&nbsp;ECHOOOO&nbsp;;)'</span><span style="color: #007700">;  
<br />&nbsp;</span><span style="color: #0000BB">$zahl</span><span style="color: #007700">=</span><span style="color: #0000BB">145</span><span style="color: #007700">;  
<br />&nbsp;if(isset(</span><span style="color: #0000BB">$zahl</span><span style="color: #007700">)&amp;&amp;</span><span style="color: #0000BB">$zahl</span><span style="color: #007700">==</span><span style="color: #0000BB">145</span><span style="color: #007700">){  

<br />&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'Oho,&nbsp;ein&nbsp;Hellseher'  
<br />&nbsp;</span><span style="color: #007700">}  
<br /></span><span style="color: #0000BB">?&gt;</span>  
</span>
Wobei man die Datei auch gleich mit highlight_file() einlesen könnte... viel mir aber eben erst ein ^^

~Arano


EDIT:
Auch mit mehreren Leerzeichen hintereinander in dem Echo hat es funktioniert.
Member: joeker
joeker Dec 09, 2008 at 16:25:01 (UTC)
Goto Top
Achso ist das face-smile

Aber wie bekomme ich den Code in einen DIV-Container? Bei mir gibt er mir den Code genau über meine Website aus; also außerhalb des Templates.
Member: joeker
joeker Dec 09, 2008 at 16:49:06 (UTC)
Goto Top
Ok, hab es selber herrausgefunden. Ich musste nur den zweiten Parameter auf true setzen ;)

Vielen dank dir Arano!
Member: Arano
Arano Dec 10, 2008 at 14:10:05 (UTC)
Goto Top
Korrekt !
Gern geschehen face-smile

~Arano