suppression du code javascript dans la source HTML - PHP - Programmation
Marsh Posté le 08-06-2006 à 11:10:31
ah.
Marsh Posté le 08-06-2006 à 11:13:01
ReplyMarsh Posté le 08-06-2006 à 11:19:50
anapajari a écrit : a mon avis ta regex est foireuse
|
il n'en veut pas , il dit que le "g", il ne connais pas
Citation : Warning: preg_replace() [function.preg-replace]: Unknown modifier 'g' |
Marsh Posté le 08-06-2006 à 11:21:35
ah oui reflexe perl-istique!!! t'en as pas besoin en php, vire le de la fin mais laisse le s
Marsh Posté le 08-06-2006 à 11:23:43
Code :
|
Ne marche pas non plus
Marsh Posté le 08-06-2006 à 11:25:02
laisse le s il t'as dit
Marsh Posté le 08-06-2006 à 11:28:17
pas de ? il me faut une * pour que ca tienne compte des <script language="javascript"> et pas <script>uniquement, et ca doit aussi capturer tout ce qu'il y a entre ces balises
Marsh Posté le 08-06-2006 à 11:33:03
trouvé... En fait yavait un souci avec les majuscules
il fallait falre :
Code :
|
Marsh Posté le 08-06-2006 à 11:35:52
bravo!!!
Maintenant en 30 fois plus simple
/<script.*?\/script>/si |
edit: et le point d'intérrogation est nécessaire!!!!
Pourquoi? si tu as le code suivant:
AAA
Code :
|
Ta regex etant greedy, tu vas te retrouver avec:
Code :
|
et non
Code :
|
Marsh Posté le 08-06-2006 à 12:48:20
greedy ??
PS : effectivement , c'est nettement plus simple
Marsh Posté le 08-06-2006 à 13:17:07
greedy : les expressions régulieres sont par defaut gourmandes et cherchent a trouver la plus grande chaine de caracteres qui satisfasse le masque de recherche. En PCRE on peut modifier ce comportement pour satisfaire certains types de recherches.
ex :
<x>patate</x><x>carotte</x>
#<x>(.*)</x># -> match -> "patate</x><x>carotte"
#<x>(.*?)</x># -> match -> "patate" et "carotte", le ? derriere un * ou un + rend celui-ci non gourmand
#<x>(.*)</x>#U -> match -> "patate" et "carotte", l'option U rend les quantificateurs + et *, de l'ensemble du masque, non gourmands
Marsh Posté le 08-06-2006 à 13:19:36
bon maintenant j'essaie de récupérer le contenu des balises a mais uniquement le lien que contient href...
Pour ce faire , j'ai fait ca :
Code :
|
$Data contient du code HTML obtenu par du file_get_conents()
Mais ca ne marque qu'a moitié
a chaque fois ca commence au bon endroit mais ca continue au dela du guillement final de href
Marsh Posté le 08-06-2006 à 13:25:19
en pcre (je ne sais pas si c'est valable avec les expressions regulieres posix) tous les caracteres perdent leur specialité dans une definition de classe "[]" a l'exception de "]" et de "-".
Donc [.]* match une suite de point eventuellement nulle et non pas une suite de caractere car . a perdu sa fonction de caractere jocker.
Tu n'as pas non plus d'interet a despecialiser le caractere espace comme tu le fais "\ " ... ca ne sert a rien :s
Citation : a chaque fois ca commence au bon endroit mais ca continue au dela du guillement final de href |
C'est typiquement un cas ou tu vas avoir besoin que ton expression reguliere ne soit pas gourmande... et donc utiliser l'option U dans le masque de recherche.
Marsh Posté le 08-06-2006 à 13:28:09
je rajouterais que le délimiteur de masque peut etre different du caractere "/". Si tu t'amuses a mettre comme délimiteur "#" par exemple ... tu n'es pas obligé de despécialiser le / de la balise a fermante qui se trouve en fin de masque.
Marsh Posté le 08-06-2006 à 14:31:26
bon , maintenant j'ai fait :
Code :
|
et voici ce que j'obtiens pour hardware.fr
....
Marsh Posté le 08-06-2006 à 14:50:14
afbilou s'est donné la peine de t'expliquer tout le concept de greedy, accompagné d'exemple plus que parlant, tu aurais au moins pu te donner la peine de le lire... Tu aurais déjà la solution à ton problème
Marsh Posté le 08-06-2006 à 15:20:13
anapajari a écrit : afbilou s'est donné la peine de t'expliquer tout le concept de greedy, accompagné d'exemple plus que parlant, tu aurais au moins pu te donner la peine de le lire... Tu aurais déjà la solution à ton problème |
je comprends bien, mais ceci ne marche pas non plus :
Code :
|
quant au masque je n'ai pas tout compris
Marsh Posté le 08-06-2006 à 15:26:12
toutes mes excuses je n'avais pas vu le post plus haut
j'ai donc fait :
Code :
|
mais j'ai encore des incohérences du genre :
Marsh Posté le 08-06-2006 à 15:34:47
normal ta fin de regex c'est une double quote suivi de '>' et dans les exemple que tu surlignes le motif que tu cherches ne correspond pas
#<a href=(['|"])(.*)\1#U |
cela devrait marcher comme tu le désire
Marsh Posté le 08-06-2006 à 11:06:48
salut
en fait je voudrais obtenir une source épurée d'un code source HTML. Dans le genre de ce que fait strip_tags() mais en enlevant le contenu de code javascript... Voici ce que j'ai fait :
Le but est , vous l'aurez compris de supprimer tout ce qui se trouve entre balise <script></script>...
Et je galeeeeeeeeeeeeeere !!