2010-12-03 5 views
4

Je veux utiliser PHP pour rechercher dans le contenu d'un fichier un élément avec un identifiant spécifique, remplacer son contenu, puis enregistrer mes modifications dans le fichier. Je suis en mesure de charger dans le HTML, et l'enregistrer à nouveau, mais j'ai des problèmes avec le 'trouver et remplacer' (actuellement en train d'utiliser preg_replace).Trouver un élément par id et remplacer son contenu par php

Voici ce que j'ai jusqu'à présent:

<?php 
// read in the content 
$file = file_get_contents('file.php'); 

// parse $file, looking for the id. 
$replace_with = "id='" . 'myID' . "'>" . $replacement_content . "<"; 
if ($updated = preg_replace('/id\=\"myID\"\>.*?\</', $replace_with, $file)) { 
    // write the contents of $file back to index.php, and then refresh the page. 
    file_put_contents('file.php', $updated); 
} 

Cependant, pendant qu'il charge avec succès dans le contenu et l'écrit (je l'ai testé en écrivant dans un fichier séparé), il semble que mis à jour $ ne change pas réellement.

Des idées?

+0

Attendez qu'il .... Attendez – MooGoo

+0

pour quoi? : D –

+1

* (lié) * [Meilleures méthodes pour analyser HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

Répondre

10

Vous pouvez utiliser pour ce PHP de DOMDocument:

$html = new DOMDocument(); 
$html->loadHTMLFile('file.php'); 
$html->getElementById('myId')->nodeValue = 'New value'; 
$html->saveHTMLFile("foo.html"); 
+0

Merci. Ne serais-je pas capable de l'enregistrer comme un fichier php de cette façon? Il est possible que ce soit aussi des fichiers xml dans le futur. –

+0

Vous pouvez, mais je ne vois pas le point que la sortie sera toujours HTML. – karim79

+0

Il doit être php pour être utilisé ailleurs maintenant. –

1

penser juste pourquoi vous fuyez « = », il devrait être /id=\"myID\"\>.*?\</

1

Je pense que vous avez des problèmes qui s'échappent passe ;-)

essayez ceci:

$replace_with = 'id="myID">' . $replacement_content . '</'; 
if ($updated = preg_replace('#id="myID">.*?</#Umsi', $replace_with, $file)) { 
    // write the contents of $file back to index.php, and then refresh the page. 
    file_put_contents('file.php', $updated); 
} 
+0

Merci, mais qu'est-ce que #Umsi? –

+0

Voilà les modificateurs. U est pour ungreedy, m est pour multiline, s pour inclure les nouvelles lignes et je pour insensible à la casse. Jetez un oeil au manuel: http://php.net/manual/fr/reference.pcre.pattern.modifiers.php – Alex

+0

Est-il vrai qu'avec cette solution, l'identifiant doit être à la fin du tag? Et si oui, existe-t-il une solution pour les éléments dont les identifiants ne correspondent pas à cette exigence? –

Questions connexes