Probleme avec une expression regulière

Discussion dans 'Administration d'un site Web' créé par Lauweb, 9 Avril 2004.

  1. Lauweb

    Lauweb Nouveau WRInaute

    Inscrit:
    22 Février 2003
    Messages:
    15
    J'aime reçus:
    0
    Bonjour,

    Je cherche à ne garder que le texte de certaines de mes pages afin d'en faire des fichiers texte.
    La fonction strip_tags élimine bien toutes les balises mais pas l'interieur des balises <script> et <style>


    Voici le script:
    Code:
    <? 
    $fd = fopen ("mapage.php", "r"); 
    while (!feof ($fd)) 
    { 
    $buffer = fgets($fd, 4096); 
    $buffer = strip_tags($buffer, '<title>'); 
    $buffer = trim($buffer); 
    $buffer = eregi_replace("<title>(.*)</title>", "", "$buffer");
    $buffer = eregi_replace("l'expression regulière que je cherche pour eliminer le contenu des balises scripts", "", "$buffer"); 
    
    echo $buffer; 
    } 
    fclose($fd); 
    ?> 
    
    J'ai don essayé des tas de choses comme:
    Code:
    $buffer = preg_replace ('^<script(.*)>(.*)</script>$', " ", $buffer);
    
    Mais ça ne donne rien!

    Quelqu'un connait il une expression regulière ou une autre manière pour épurer completement une chaine de caractere?

    Merci de votre aide precieuse.
     
  2. Lauweb

    Lauweb Nouveau WRInaute

    Inscrit:
    22 Février 2003
    Messages:
    15
    J'aime reçus:
    0
    Non? personne n'a une petite idée?

    Le script est sur le point de fonctionner, il semble que c'est une histoire d'espaces et de sauts de ligne qui empêche la bonne execution du script...

    Si la page à traiter est de cette forme:
    Code:
    <script>mafonction(){blableblibloblu}</script>
    .....corps de la page.....
    
    ça marche

    Si la page à traiter est de cette forme (avec des sauts de ligne):
    Code:
    <script>
    mafonction(){blableblibloblu}
    </script>
    .....corps de la page.....
    
    ça ne marche pas


    Pourtant, j'ai bien enlevé les /n et les /r
    Voir le code actuel:
    Code:
    <? 
    $fd = fopen (monfichier.php, "r"); 
    while (!feof ($fd)) 
    { 
    $buffer = fgets($fd, 4096); 
    $buffer = str_replace(array("\n","\r"),array("",""),$buffer); 
    $buffer = preg_replace("/<script[^>]*>.*<\/script>/isU","",$buffer); 
    echo $buffer; 
    } 
    fclose($fd); 
    ?> 
    
    Si quelqu'un peut m'eclairer, j'en serais ravi.
    Merci d'avance.
     
  3. George Abitbol

    George Abitbol WRInaute passionné

    Inscrit:
    6 Juin 2003
    Messages:
    1 909
    J'aime reçus:
    0
    Alors utilise l'option de recherche s, pour ta regex.
    http://fr2.php.net/manual/fr/pcre.pattern.modifiers.php

    Fred
     
  4. Lauweb

    Lauweb Nouveau WRInaute

    Inscrit:
    22 Février 2003
    Messages:
    15
    J'aime reçus:
    0
    Merci George

    Mais j'utilise déjà cette option:
    Code:
    $buffer = preg_replace("/<script[^>]*>.*<\/script>/isU","",$buffer);
    Je bloque...
     
  5. George Abitbol

    George Abitbol WRInaute passionné

    Inscrit:
    6 Juin 2003
    Messages:
    1 909
    J'aime reçus:
    0
    Ah oui, en effet. En fait je crois que tu devrais d'abord récupérer tout le contenu dans ta variable et après seulement faire le traitement sur cette variable. Parce que là tu traites ligne par ligne donc effectivement les motifs ne correspondent pas.

    Fred
     
  6. Lauweb

    Lauweb Nouveau WRInaute

    Inscrit:
    22 Février 2003
    Messages:
    15
    J'aime reçus:
    0
    Oui... euh... et comment tu fais ça?
     
  7. George Abitbol

    George Abitbol WRInaute passionné

    Inscrit:
    6 Juin 2003
    Messages:
    1 909
    J'aime reçus:
    0
    Ben au lieu d'écraser la valeur de $buffer à chaque ligne parcourue, tu concatènes à la suite et à la fin de ta boucle tu auras tout le contenu dans $buffer. L'opérateur de la concaténation est le point.

    Fred
     
  8. Lauweb

    Lauweb Nouveau WRInaute

    Inscrit:
    22 Février 2003
    Messages:
    15
    J'aime reçus:
    0
    Désolé je n'ai jamais eu l'occasion de faire ce genre de concatenation

    Si tu pouvais me montrer, j'apprendrais quelque chose

    Merci à toi, Fred
     
  9. George Abitbol

    George Abitbol WRInaute passionné

    Inscrit:
    6 Juin 2003
    Messages:
    1 909
    J'aime reçus:
    0
    Code:
    <?php
    $buffer = '';
    $fd = fopen ("mapage.php", "r");
    while (!feof ($fd)) {
      $buffer .= fgets($fd, 4096);
    }
    fclose($fd);
    ?>
    Et ensuite seulement tu fais ton traitement.

    Fred
     
  10. Lauweb

    Lauweb Nouveau WRInaute

    Inscrit:
    22 Février 2003
    Messages:
    15
    J'aime reçus:
    0
    Genial! ça marche! Je n'y aurais pas pensé,

    Fred, tu m'as enlevé une sacrée épine du pied, ça faisait 1 semaine que j'étais la dessus...

    Merci encore :p