Placer le texte des commentaires dans une variable

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Placer le texte des commentaires dans une variable

par h2o » 05 août 2005, 12:06

Voici le code qui donne le résultat escompté.
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt");
preg_match_all('#<!--(.*?)-->#',$content,$commentaires, PREG_PATTERN_ORDER);
foreach ($commentaires[1] as $commentaire) 
     {
      print $commentaire . "\n" ;
     }
}
Merci

par ouckileou » 05 août 2005, 11:45

alors il faut utiliser les parenthèses capturantes :
preg_match_all('#<!--(.*?)-->#',$content,$commentaires, PREG_PATTERN_ORDER); 

echo '<pre>';
print_r($commentaires[1]);
echo '</pre>';
à tester ;)
int preg_match_all ( string pattern, string subject, array &matches [, int flags [, int offset]] )


PREG_PATTERN_ORDER

L'ordre est tel que $matches[0] est un tableau qui contient les résultats qui satisfont le masque complet, $matches[1] est un tableau qui contient les résultats qui satisfont la première parenthèse capturante, etc.

par h2o » 05 août 2005, 11:38

Les enlever du texte, vous m'avez appris cela hier (http://www.phpfrance.com/forums/voir_su ... 0-asc-.php)

Maintenant, ce que je voudrais, c'est récupérer le texte des commentaires, sans les balises. Et la (le ?) regex "#<!--.*?-->#" récupère le texte entouré des balises "<!--" et "-->"

par ouckileou » 05 août 2005, 11:35

question : tu veux simplement les récuper ou aussi les enlever du texte ?

par h2o » 05 août 2005, 11:31

Voici le code corrigé : cela fonctionne, mais le regex n'est pas correcte : les balises de commentaires sont maintenues.
if (file_exists("index.txt")) 
{ 
$content = file_get_contents("index.txt") ; 
preg_match_all('#<!--.*?-->#',$content,$commentaires);
foreach ($commentaires as $commentaire) 
     {
      foreach ($commentaire as $text)
          {
            print $text . "\n" ;
          }
     }
}

par ouckileou » 05 août 2005, 11:29

C'est donc un problème d'expression régulière...
pas forcément pour l'instant puisque preg_match renvoie un entier, et qu'ici h2o affiche une cellule de tableau

il faudrait essayer ceci je pense d'abord :
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt") ;
$commentaire = preg_match('#<!--.*?-->#',$content) ;
print $commentaire ;
}

par Cyrano » 05 août 2005, 11:25

C'est donc un problème d'expression régulière... je nesuis pas champion du monde de la catégorie: sur le testeur de regex, arrives-tu à obtenir un résultat ?

par ouckileou » 05 août 2005, 11:21

preg_match ne renvoie qu'un entier, il faut que tu spécifies un autre paramètre pour récupérer des résultats

regarde la doc => http://fr.php.net/manual/fr/function.preg-match.php
il y a un exemple

par h2o » 05 août 2005, 11:19

Oui, évidemment.

J'ai été voir le site http://www.lumadis.be/regex/test_regex.php et j'ai fait quelques tests.

Voici donc le bout de code :
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt") ;
$commentaire = preg_match('#<!--.*?-->#',$content) ;
print $commentaire[0] ;
}
Ne sort rien, alors que les premières ligne de mon texte "index.txt" sont des commentaires. Je pensais au moins obtenir le premier commentaire avec les balises. Même si je voudrais le garder que le texte.

par Cyrano » 05 août 2005, 10:44

On peut t'aider à corriger un code déjà commencé, pas faire le code à ta place... mais tu ne nous montres rien à corriger :-k

par ouckileou » 05 août 2005, 10:43

il faudrait préciser que tes commentaires sont dans un fichier ;) tout le monde n'a pas forcément suivi

regarde cette fonction : http://fr.php.net/manual/fr/function.fi ... ntents.php

Placer le texte des commentaires dans une variable

par h2o » 05 août 2005, 10:41

Je suis toujours aussi débutant :oops:

Demande inverse de celle d'hier.

Je voudrais placer le texte de tout les commentaires dans une variable, chaque commentaire séparé du premier par un retour "\n".

Par exemple :

$commentaire contiendrais :
"Texte modifie le 2005-08-04 - 11:55 par Jean-Marie Hoornaert \n
Texte modifie le 2005-08-04 - 14:52 par Anne Onyme\n"

Qui peux m'aider ?