Probleme avec une expression regulière

  • Auteur de la discussion Auteur de la discussion Lauweb
  • Date de début Date de début
Nouveau WRInaute
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.
 
Nouveau WRInaute
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.
 
Nouveau WRInaute
Merci George

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

Je bloque...
 
WRInaute passionné
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
 
WRInaute passionné
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
 
Nouveau WRInaute
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
 
WRInaute passionné
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
 
Nouveau WRInaute
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
 
Discussions similaires
Haut