Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2008, 20h02   #1
Membre du Club
 
Inscription : avril 2007
Messages : 233
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2007
Messages : 233
Points : 60
Points : 60
Par défaut Enlever des éléments appartenant à une chaine

Bonsoir,

Mon problème est le suivant:
J'ai une chaine de caractère qui contient des éléments que je voudrais supprimer.

Je met dans un tableau les balises que je souhaite enlever dans une chaine.
Code :
$tabTagToStrip=array('<img','<embed');
J'ai par exemple:
Code :
1
2
3
 
$content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br>
<p align="center"><img width="354" height="183" src="upload/wysiwyg/image/particuliers_grd.jpg" alt=""/></p><br><br></div>';
Dans le résultat j'aurai:
Code :
1
2
3
 
$content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br>
<p align="center"></p><br><br></div>';
Comme vous pouvez le constater la balise img (ainsi que tous son contenu) a été supprimé du contenu de la variable puisque je l'ai déclaré dans le tableau $tabTagToStrip comme élément à bannir si vous voulez..

Est ce que vous avez une idée comment pourrai-je réaliser ceci??

Merci
__________________
Il faut parfois servir pour mieux dériger..
namstou3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 20h27   #2
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Bonsoir,

J'aurais bien pensé à utiliser la fonction strip_tags qui permet via son paramètre optionel de spécifier une liste de tags à conserver.

Comme je ne sais pas trop dans quelle logique tu te trouves, je t'indique déjà cette solution qui est rapide à mettre en place.

Ensuite, si tu ne veux supprimer que quelques balises ( ton exemple) alors il faudra utiliser des expressions régulières.
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 21h35   #3
Membre du Club
 
Inscription : avril 2007
Messages : 233
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2007
Messages : 233
Points : 60
Points : 60
Merci pour ta réponse FCYPBA
Voilà ce que j'ai fais:

Code :
1
2
3
4
5
6
 
<?php
$string = '<h1>Salut</h1><p>tout le monde</p>';
$pattern = '@<p[^>]*?>.*?</p>@si';
echo preg_replace($pattern, '', $string)
?>
ça marche parfaitement, mais ce que je veux maintenant c'est de faire le teste sur un tableau et non pas un seul élément. Quelque chose du genre:

Code :
1
2
3
4
5
6
7
 
<?php
$string = '<h1>Salut</h1><p>tout le monde</p>';
$tabTagToStrip = array("img","p");  //tableau
$pattern = '@<p[^>]*?>.*?</p>@si';  //Au lieu de p j'aurais les éléments de mon tableau
echo preg_replace($pattern, '', $string)
?>
j'ai fais une boucle for mais ça n'a pas marché du faite que ça boucle infiniment
Avez-vous une idée comment je pourrai régler ceci?

Merci
__________________
Il faut parfois servir pour mieux dériger..
namstou3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2008, 23h17   #4
Membre émérite

 
Avatar de FCYPBA
 
Inscription : novembre 2004
Messages : 735
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : novembre 2004
Messages : 735
Points : 924
Points : 924
Dans ce cas tu dois pouvoir utiliser les conditions regex

Il me semble que ca marche comme ca mais à verifier dans une doc

Code :
1
2
 
$pattern = '@<[p|strong|b][^>]*?>.*?</[p|strong|b]>@si';
__________________
Pierre
1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
3. Un code rapide c'est bien, un code maintenable c'est mieux
...

Why was the font tag an orphan ? Because it didn't have a font-family.
FCYPBA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 00h24   #5
Membre du Club
 
Inscription : avril 2007
Messages : 233
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2007
Messages : 233
Points : 60
Points : 60
Je crois que je n'ai pas été assez clair, ce que je veux, c'est pouvoir faire le test pour les éléments d'un tableau..

Code :
$tabTagToStrip = array("img","p");  //tableau
c'est à dir pour faire le regex, il faut boucler sur les éléments du tableau qui contiendrai les balise à ne pas afficher.

y'il un moyen??

Merci
__________________
Il faut parfois servir pour mieux dériger..
namstou3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 01h07   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
qqch comme ça :

Code :
1
2
3
4
5
6
7
8
9
$content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br>
<p align="center"><img width="354" height="183" src="upload/wysiwyg/image/particuliers_grd.jpg" alt=""/></p><br><br></div>';
$tabTagToStrip = array("img","p");
 
$bal = join('|', $tabTagToStrip) ;
// avec ta regex :
$content = preg_replace('@<p[^>]*>.*?</p>@si',  '', $content) ;
// variante :
$content = preg_replace('@</?($bal)[^>]*>@si', '', $content) ;
Ta regex élimine le <p>, le </p>, et tout ce qu'il y a entre les deux. Ma variante est moins radicale, et se contente d'enlever les balises ouvrantes fermantes mais pas le texte entre elles.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 01h15   #7
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
Merci pour l'alias, je ne savais pas qu'implode avait un alias si sympa, merci encore.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 12h50   #8
Membre du Club
 
Inscription : avril 2007
Messages : 233
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2007
Messages : 233
Points : 60
Points : 60
Merci Antoun
Mais ta variable ne marche pas.
Au fait je me suis rendu compte que je dois supprimer que les balises et garder le contenu..
Donc je dois changer ma regex..
Vous pouvez m'aider??

Merci
__________________
Il faut parfois servir pour mieux dériger..
namstou3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 13h13   #9
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par namstou3 Voir le message
Merci Antoun
Mais ta variable ne marche pas.
Forcément, j'ai écris la regex dans une chaîne non-interprétée...

Code :
$content = preg_replace("@</?($bal)[^>]*>@si", '', $content) ;
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2008, 13h55   #10
Membre du Club
 
Inscription : avril 2007
Messages : 233
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2007
Messages : 233
Points : 60
Points : 60
Merci Antoun là ça marche à merveille..

Voici le code au cas où ça aiderai quelqu'un:

Code :
1
2
3
4
5
6
7
8
9
 
$content='<div align="justify">Lorem ipsum dolor sit amet, consectetur adipisicing elit<br><br><p>salut</p><h1>tout le monde</h1>
<p align="center"><img width="354" height="183" src="upload/wysiwyg/image/particuliers_grd.jpg" alt=""/></p><br><br></div>';
$tabTagToStrip = array("img","p","div");
 
$bal = join('|', $tabTagToStrip) ;
 
$content = preg_replace("@</?($bal)[^>]*>@si", '', $content) ;
echo $content;
__________________
Il faut parfois servir pour mieux dériger..
namstou3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h28.


 
 
 
 
Partenaires

Hébergement Web