2010-03-04 6 views
1

Comment diviser un fichier au format HTML en plusieurs fichiers HTML (complets avec des balises HTML, HEAD et BODY) avec PHP? J'aurais un tag de placeholder (quelque chose comme <div class='placeholder'></div>) pour tous les endroits que je veux couper.Fractionner des fichiers HTML

Merci.

+0

Cela semble fondamentalement réinventer l'idée de templating ... comme avec Smarty ... y at-il une raison pour laquelle ce n'est pas une option? – Jack

+1

Réinvention quelque chose n'est pas toujours mauvais. J'ai réinventé mon propre moteur de template pour mon site et sa supériorité en termes de flexibilité. Cependant, je pense que vous avez probablement raison, dans cette situation, si le PO ne sait pas comment le faire, je pense que quelque chose comme Smarty pourrait être une meilleure option. – Layke

Répondre

4
$sourceHTML = file_get_contents('sourcefile'); 

$splitContents = explode("<div class='placeholder'></div>", $sourceHTML); 

foreach ($splitContents as $html) { 
    // save html to file 
} 

Édition: whoops. Comme l'indique correctement user201140, j'ai manqué le fait que chaque fichier html doit être un document valide. Comme il n'est pas précisé exactement ce que l'étiquette principale devrait contenir, je supposerai que l'étiquette principale du document combiné devrait être répliquée à chaque copie. Dans ce cas:

$sourceHTML = file_get_contents('sourcefile'); 
preg_match("/(^.*<body.*?>)(.*)(<\/body.*$)/is", $sourceHTML, &$matches); 
$top = $matches[1]; 
$contents = $matches[2]; 
$bottom = $matches[3]; 
$splitContents = explode("<div class='placeholder'></div>", $contents); 
foreach ($splitContents as $chunk) { 
    $html = $top.$chunk.$bottom; 
    // save html to file 
} 
+0

Qu'adviendrait-il des balises HTML, HEAD BODY pour chaque page? Chaque partie doit être un fichier HTML autonome. – usertest

+0

Ne semble pas fonctionner, il crée un seul fichier vide. – usertest

+0

Je suppose que vous avez réellement implémenté le code de gestion de fichiers? Si c'est le cas, il est difficile de savoir quel est le problème. Très probablement, l'expression rationnelle ne correspond pas, bien que je l'ai essayé sur un tas de fichiers html et il correspond à tous. Cela ne fonctionnera certainement pas si le code source html n'a pas de balise body. – sidereal

0

Le preg semble ne fonctionner que pour les petits fichiers ...

Quoi qu'il en soit ... Pour diviser un fichier HTML de ce formulaire:

(header...) <body><div class='container'> (intro...) 
<h3>Sect 1</h3> (section...) 
<h3>Sect 2</h3> (section...) 
(etc...) 
</div></body></html> 

Je gère cette façon:

$splitContents = explode("<h3", $sourceHTML); 
$i=0; 
$last=count($splitContents)-1; 
foreach ($splitContents as $chunk) { 
    if($i==0) { 
     $beginning=explode("<body", $chunk); 
     $top=$beginning[0]; 
     $html = $chunk ; 
    } else { 
     $html = $top . "<body><div class='container'><h3" . $chunk ; 
    } 
    if($i !=$last) $html .= "</div></body></html>"; 
    // save html to file 
    ++$i; 
} 
Questions connexes