probleme pattern pour eregi_replace()

probleme pattern pour eregi_replace() - PHP - Programmation

Marsh Posté le 14-08-2007 à 16:31:51    

Bonjour
 
J'ai le contenu d'une page HTML dans une string
et je voudrais supprimer seulement certaines balises  
telles que <head> , <style>, <script>
 
je voudrais utiliser la methode eregi_replace()
mais je galère a définir le pattern
 
voici ce que j'ai essayé (les Regexp c vraiment pas mon fort pour le moment) :
 
$Pattern = "(<[style][A-Za-z0-9]{1,}>[A-Za-z0-9]</[style]+> )";
 
ca marche mais ce que je voudrais obtenir c'est supprimer tous les expression qui par ex :
commencent par <style  
+ qui peut contenir des parametres (ex: type="text/css" )
+ tout le texte qui peut suivre (ex: ".maclasse { border:1px.... };" )
+ jusqu'a </style>
 
Pour info mon environement de travail :
- Windows XP, PHP5
 
Pouvez vous me filer un coup de main
merci

Reply

Marsh Posté le 14-08-2007 à 16:31:51   

Reply

Marsh Posté le 14-08-2007 à 17:56:12    

bon c'est pas avec ereg, mais je te donne une solution ultra simpliste avec preg...

 
Code :
  1. $s = preg_replace('|<style(.*)</style>|iUs', '', $s);
 

pas testé mais ca devrait marcher


Message édité par e-deby le 14-08-2007 à 17:57:19
Reply

Marsh Posté le 14-08-2007 à 18:21:20    

@e-deby
J'ai testé avec d'autres balises etc... en changeant ce qu'il faut. Ca marche ! Code bien utile dans bien des cas. Merci.

Reply

Marsh Posté le 14-08-2007 à 22:30:49    

merci bien.
je testerai ca jeudi
au fait ca fait quoi "iUs" ?
 
autre question:
- vous connaisez une classe qui permette soit d'extraire toutes les balises HTML d'images par exemple d'une chaine HTML  et les met dans un array ?
 
- ou alors un parser de code HTML qui crée une représentation XML, ou un array, ou un objet (enfin bref une sorte de DOM)  
pour manipuler (ou au moins acceder aux valeurs) les element du doc HTML avec PHP
bref comme utiliser le DOM HTML en Javascript
 
ca me serait super utile.


Message édité par jokari34 le 14-08-2007 à 22:36:00
Reply

Marsh Posté le 14-08-2007 à 22:46:03    

Pour les images, essayes un truc du genre

 
Code :
  1. // $s est le HTML
  2. preg_match_all('|<img(.*)src="(.*)"(.*)>|iUs', $s, $matches);
  3. var_dump($matches);
 

Pour le Uis, lisez la doc alala on peut pas le faire à votre place
http://www.php.net/manual/fr/refer [...] ifiers.php

 
Citation :


U (PCRE_UNGREEDY)
    Cette option inverse la tendance à la gourmandise des expressions rationnelles. Vous pouvez aussi inverser cette tendance au coup par coup avec un ?. De même, si cette option est activée, le ? rendra gourmand une séquence. Cette option n'est pas compatible avec Perl. Elle peut aussi être mise dans le masque avec l'option ?U dans le pattern ou par un point d'interrogation avant le quantifieur (.e.g. .*?).

 

i (PCRE_CASELESS)
    Effectue une recherche insensible à la casse.

 

s (PCRE_DOTALL)
    Avec cette option, le méta-caractère point (.) remplace n'importe quel caractère, y compris les nouvelles lignes. Sans cette option, le caractère point ne remplace pas les nouvelles lignes. Cette option est équivalente à l'option Perl /s. Une classe de caractères négative telle que [^a] acceptera toujours les caractères de nouvelles lignes, indépendamment de cette option.

 


Enfin, pour le DOM, avec du HTML par définition ca va etre compliqué vu que ca n'est pas sensé respecter strictement une arbo correcte. Tu dois pouvoir bidouiller une méthode, mais bon ca sera pas fiable
Avec du XHTML par contre la ca devrait se faire justement tout seul non ?


Message édité par e-deby le 14-08-2007 à 22:47:30
Reply

Marsh Posté le 16-08-2007 à 10:22:21    

oui c sur qu'avec XHTML ca serait plus simple.
Mais combien ya de sites en XHTML ?
je dois m'adapter a ce qui existe.
 
dans ce cas comment ca se fait, que meme avec le code HTML le plus pourri, le DOM est créé correctement et pleinement exploitable avec Javascript ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed