Messages: 15

Enregistré le: 22 Fév 2003

Message le Ven Avr 09, 2004 16:40

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: Tout sélectionner
<?
$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: Tout sélectionner
$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.
Haut
9 Réponses
Messages: 15

Enregistré le: 22 Fév 2003

Message le Sam Avr 10, 2004 18:59

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: Tout sélectionner
<script>mafonction(){blableblibloblu}</script>
.....corps de la page.....

ça marche

Si la page à traiter est de cette forme (avec des sauts de ligne):
Code: Tout sélectionner
<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: Tout sélectionner
<?
$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.
Haut
Messages: 1923

Enregistré le: 6 Juin 2003

Message le Sam Avr 10, 2004 19:02

Lauweb a écrit: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...


Alors utilise l'option de recherche s, pour ta regex.
http://fr2.php.net/manual/fr/pcre.pattern.modifiers.php

Fred
Haut
Messages: 15

Enregistré le: 22 Fév 2003

Message le Sam Avr 10, 2004 19:17

Merci George

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


Je bloque...
Haut
Messages: 1923

Enregistré le: 6 Juin 2003

Message le Sam Avr 10, 2004 19:47

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
Haut
Messages: 15

Enregistré le: 22 Fév 2003

Message le Sam Avr 10, 2004 20:00

Oui... euh... et comment tu fais ça?
Haut
Messages: 1923

Enregistré le: 6 Juin 2003

Message le Sam Avr 10, 2004 20:04

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
Haut
Messages: 15

Enregistré le: 22 Fév 2003

Message le Sam Avr 10, 2004 20:08

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
Haut
Messages: 1923

Enregistré le: 6 Juin 2003

Message le Sam Avr 10, 2004 20:14

Code: Tout sélectionner
<?php
$buffer = '';
$fd = fopen ("mapage.php", "r");
while (!feof ($fd)) {
  $buffer .= fgets($fd, 4096);
}
fclose($fd);
?>


Et ensuite seulement tu fais ton traitement.

Fred
Haut
Messages: 15

Enregistré le: 22 Fév 2003

Message le Sam Avr 10, 2004 21:13

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
Haut