2016-03-31 2 views
-1

Ich verwende 'PHP Simple HTML DOM Parser' zum Hochladen von Dateien (in diesem Fall eine Zip), öffnen Sie die Indexdatei, und ermöglichen Sie Links zu ändern. Sobald die Links aktualisiert sind, wird die Indexdatei überschrieben und für den Download gezippt.Behalten Sie Leerzeichen in Dateien nach dem Speichern mit HTML Simple Dom Parser

Das alles funktioniert gut, das einzige Problem, das ich habe, ist, sobald die aktualisierte Indexdatei gespeichert ist, verliert es seinen ganzen Leerraum innerhalb der Datei. Wenn Sie also die Datei in einem Texteditor öffnen, ist sie nicht mehr mit einer Struktur versehen, so dass es sehr schwierig ist, normal zu lesen/zu bearbeiten.

Gibt es eine Möglichkeit, diesen Leerraum zu erhalten?

Die „upload“ Datei, die mit Feldern darunter die hochgeladene Datei, zeigen Sie es in einem iFrame nimmt bestehende Verbindungen zu zeigen, und ein Feld, um sie zu aktualisieren:

 <div class="output"> 
     <form action="download.php" id="urlform" method="POST"> 

     <?php 

      //Traverse DOM of iFrame content, output existing href tags 
      $html = file_get_html($_SESSION['index']); 
      $i = 1; 
      $inc = 1; 

      foreach($html -> find('a') as $element) : ?> 

       <!-- Ignore untagged links --> 
       <?php if (strpos($element -> href, "utm") !== false) { 

        $element -> name = $inc; ?> 

        <?php if ($i % 2 === 0) { 
         echo '<div class="alternate">'; 
        } else { 
         echo '<div class="standard">'; 
        } ?> 

        <!-- Add name attr to anchor tags for reference --> 
        <div class="assign"> 
         <p><?php echo $element -> name; ?></p> 
        </div> 

        <div class="content"> 

         <h3>Existing tag:</h3> 

         <p><?php echo $element -> href; ?></p> 

         <h3>New tag:</h3> 

         <input type="textarea" name="urltag_<?php echo $inc; ?>"> 

         </div> 

        </div> 

       <?php $i++; $inc++; } ?> 

      <?php endforeach; ?> 


     <input type="submit" value="Update eShot"> 

    </form> 
    </div> 

Und die Download-Datei, die zeigt, ein iFrame mit der aktualisierten Indexdatei und einem Download:

<?php 
     //Open index.html of zip and replace href with new tags 
     $newhtml = file_get_html($_SESSION['index']); 

     $inc = 1; 

     foreach($newhtml -> find('a') as $url) { 

      if (strpos($url -> href, "utm") !== false) { 

       $url -> href = $_POST["urltag_" . $inc]; 
       $inc++; 
       }; 

      } 

     //Store changes in new index file    
     file_put_contents($_SESSION['index'], $newhtml); 

     $folder = $_SESSION['new_directory']; 

     if (isset($_SESSION['portal'])){ 
      $zipname = $_SESSION['name'] . " " . $_SESSION['portal'] . " " . date('dmy') . ".zip"; 
     } else { 
      $zipname = $_SESSION['name'] . " " . date('dmy') . ".zip"; 
     } 


     class FlxZipArchive extends ZipArchive { 

      public function addDir($folder, $zipname) { 
       $this->addEmptyDir($zipname); 

       $this->addDirDo($folder, $zipname); 
      } 


      private function addDirDo($folder, $zipname) { 
       $zipname .= '/'; 
       $folder .= '/'; 


       $dir = opendir ($folder); 
       while ($file = readdir($dir)) 
       { 
        if ($file == '.' || $file == '..') continue; 

        $do = (filetype($folder . $file) == 'dir') ? 'addDir' : 'addFile'; 
        $this->$do($folder . $file, $zipname . $file); 
       } 
      } 
     } 

     $za = new FlxZipArchive; 
     $res = $za->open($folder . "/" . $zipname, ZipArchive::CREATE); 
     if($res === TRUE) 
     { 
      $za->addDir($folder, basename($folder)); 
      $za->close(); 
     } 
     else { echo 'Could not create a zip archive';} 

    ?> 


    <div class="thankyou"> 
     <p>Thank you. Please check your new links in the eShot below:</p> 
    </div> 

    <iframe class="eshotwrapper" src="<?php echo $_SESSION['index'] ?>"></iframe> 

    <div class="downloadlink"> 
     <p>Once you have confirmed your tagged links are correct, please click the link below to download your new eShot: <br> 
      (Right-click and select "Save as..." to choose a save location)</p> 
     <a href="<?php echo $_SESSION['new_directory'] . "/" . $zipname ?>"><button type="button">Download</button></a> 
    </div> 

</div> 

Vielen Dank!

Antwort

0

Wenn Sie das HTML in eine DOM-Struktur analysieren, wird die ursprüngliche Formatierung in dieser Struktur überhaupt nicht beibehalten. Sie können die Ausgabe jedoch über eine Bibliothek ausführen, um den richtigen Einzug einzufügen und die Ausgabe zu verschönern.

Wenn Sie die Ausgabe genau so beibehalten möchten, wie sie ist, haben Sie mehr Erfolg beim Verwenden von Regexes zum Suchen und Umbrechen von Tags.

Verwandte Themen