retirer du contenu entre deux balises

Eléphant du PHP | 294 Messages

04 août 2008, 11:44

Bonjour
Quelqu'un aurait-il une fonction - forcément brillante, pour retirer tout une portion de code dans une variable; plus précisément : j'ai du texte avec à l'intérieur une video youtube et donc du code à dans des balises objet, je voudrais dans certains cas faire sauter les balises plus leur contenu. je ne sais même pas par quel bout prendre ça
merci

Mammouth du PHP | 2937 Messages

04 août 2008, 11:45

preg_replace ("#<object(.*?)>(.*?)</object>#i", '', $ton_contenu)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

04 août 2008, 12:00

Il ne manque qu'une petite explication de ce que fait cette ER pour que ça ne ressemble pas à un bout de code donnée et utilisé sans compréhension ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 294 Messages

04 août 2008, 12:12

merci pour ta réponse rapide , mais il y a un bins, ça me retire tout

Code : Tout sélectionner

<?php preg_replace("#<object(.*?)>(.*?)</object>#i",'', $row_master1discussions['question']); ?>

Mammouth du PHP | 2937 Messages

04 août 2008, 12:17

Il ne manque qu'une petite explication de ce que fait cette ER pour que ça ne ressemble pas à un bout de code donnée et utilisé sans compréhension ;)
L'expression rationnelle ci-dessus (compatible PERL, ce qui a pour avantage d'être plus rapide qu'une expression rationnelle de type POSIX utilisée par les fonctions en ereg_* et eregi_*) va chercher dans la variable $ton_contenu (qui est une chaîne contenant le code HTML) une sous-chaîne contenant la balise d'ouverture object (dans laquelle peuvent se trouver des attributs, d'où le sélecteur universel . pour chercher n'importe quel caractère pouvant être compris entre object et >, le ? permettant d'éviter de capturer plusieurs >), n'importe quel caractère pouvant apparaître ou pas (cas d'un élément object vide, par exemple) et la balise de fermeture object, et ce sans tenir compte de la sensibilité à la casse (drapeau i). Cette sous-chaîne sera (puisqu'on utilise la fonction preg_replace()) remplacée par une chaîne vide, ce qui a pour effet d'éliminer tout élément object contenu dans la variable $ton_contenu.

Si ta variable est une chaîne de type '<object>le reste du code</object>', évidemment ça retirera tout. Auquel cas il faudra affiner l'expression régulière (encore faut-il savoir ce que tu veux éliminer précisément dans ton code).

Eléphant du PHP | 294 Messages

04 août 2008, 12:27

merci pour le commentaire, il est vrai que dans un second temps je voulais comprendre
voila le contenu de la variable passée en argument :

Code : Tout sélectionner

Je ne résiste pas à l'envie de vous donner à voir cette vidéo du Nyepi Day : le jour du silence. Ça se déroule en Mars-avril et ce jour personne n'a le droit de sortir , d'allumer la lumière..belle discipline ! Étonnant. <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/y1Wv2q0W768&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/y1Wv2q0W768&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>

Mammouth du PHP | 2937 Messages

04 août 2008, 13:19

Essaie déjà ce code :
$contenu = 'Je ne résiste pas à l\'envie de vous donner à voir cette vidéo du Nyepi  Day : le jour du silence.  Ça se déroule en Mars-avril et ce jour personne n\'a le droit de sortir , d\'allumer la lumière..belle discipline !
Étonnant.
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/y1Wv2q0W768&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/y1Wv2q0W768&hl=en&fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>';
$contenu_epure = preg_replace ("#<object(.*?)>(.*?)</object>#i", '', $contenu);
echo $contenu_epure;
Normalement, l'expression régulière ne devrait pas tout vider. :-k

Eléphant du PHP | 294 Messages

05 août 2008, 08:59

J'ai honte ! j'avais oublié l' echo! ça risquait pas de s'afficher - bon c'est aussi pour ça que je poste en débutant. ta fonction est parfaite et en plus tes explications m'ont fait comprendre des trucs
merci