j'essaye de supprimer les "invalidités" d'un fichier html pour pouvoir utiliser le parser xml du php
mon problème : je n'arrive pas à trouver une regex permettant de supprimer la balise "script" et tout son contenu (qui est une grosse source d' "invalidités")
J'ai essaye :
/<SCRIPT[^>]*>[^(<\/SCRIPT>)]*<\/SCRIPT>/
mais ça n'a pas marché (la page pour laquelle j'ai essayé avait les balises "script" en majuscules)
est-ce que vous voyez une solution ?
merci
guilc Le 18/08/2004 à 21:43 Je dirais :
/\<script[^\>]*\>(?<!\<\/script\>)*\<\/script\>/i
Mais c'est total de mémoire, donc sans garantie
marchera pas. Tu peux toujours tomber sur un truc comme ça :
[pre]<script language="JavaScript">
<!--
document.alert('//!--></script>');
//-->
</script>[pre]C'est pas faisable avec une expression régulière. Parce qu'il te faut une analyse contextuelle.
guilc > non ça marche pas (peut-être dû au PHP, car j'ai une erreur "Compilation failed: nothing to repeat")
merci quand même
Si ça utilise des regexp posix (pas gagné), la regexp suivante devrait marcher
[<][Ss][Cc][Rr][Ii][Pp][Tt][^>]*[>][^[.</script>.]]*[<]\/script[>]
bon j'ai trouvé une solution
en faisant :
/<SCRIPT[^>]*>.*<\/SCRIPT>/s
ça marche.
Le "s" de fin est important car le "." doit recouvrir les retours à la ligne (jamais compris entre les "\r" et "\n" )
Normalement avec le "m" ça aurait dû marcher (censé traiter la chaîne comme une seule ligne, en 1 seule fois) quelque chose m'échappe
ça marche ça ? c'est quoi ton analyseur de regexps pourri ?
Ah attends, ça marche si tu as deux scripts dans la même page ? Le truc devrait normalement de virer tout ce qui est entre le début du premier script et la fin du dernier.
comment ça il crashe ? le serveur ne s'arrête pas non ?
le message classique "ce programme va fermer ..." (j'ai apache 1.3 je crois)
Dans les processus, il y a toujours 2 apaches ouverts, quand il crashe, un disparait puis réapparait peu après. A cause du crash, la page n'est pas envoyée.
Edit: est-ce que qqun pourrais essayer et me dire si ça le fait vraiment que chez moi ?
Ah, ben le serveur ne crashe pas alors. Seule la partie qui sert ta requête se ferme.