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 02/12/2006, 12h40   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
Par défaut chaine de caractere et tag image

bonjour,

je cherche un moyen de savoir si dans une chaine de caractere plus precisement dans la balise img si l'attribut border est renseigne auquel cas, cela doit me retrouner true ou false
sachant que dans cette chaine il peut y avoir plusieurs occurences de la balise img
j'ai tester pas mal de regex mais sans succés.

un exemple de deux lignes de code saisi par l'utilisateur :
Code html :
<a href="javascript:pop_image('6435','6435','200','281');"><img width="178" height="250" border="0" align="left" src="http://www.pcinpact.com/images/bdd/news/v-6435.jpg" alt="" style="margin: 5px;" /></a><a href="javascript:pop_image('6435','6435','200','281');"><img width="178" height="250" align="left" src="http://www.pcinpact.com/images/bdd/news/v-6435.jpg" alt="" style="margin: 5px;" /></a>

je dois trouver un moyen de remplacer style="margin:5px;" par style="margin5px; 1px solid #ff6600" si border="0" n'est pas renseigne

merci
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 12h59   #2
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Je propose de faire en plusieurs étapes, c'est pas forcément le plus performant, mais est plus facile à maintenir :

Code :
1
2
3
4
5
6
7
8
//récupérer le contenu de la balise img, la ligne étant stockée dans $ligne
$contenu_img = preg_replace("/<img (.*?) \/>/", $1, $ligne);
 
//test de la présence de border=0
$test = preg_match("/border=\"0\"/", $contenu_img)
 
// remplacement
if (!$test) preg_replace("/style=\"margin:5px;\"/", "style=\"margin5px; 1px solid #ff6600\"/, $ligne);
ou un truc du genre, je n'ai pas le temps de tester la syntaxe exact...
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 13h00   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
merci je vais tester cela
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 13h02   #4
Membre expérimenté
 
Inscription : septembre 2006
Messages : 685
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 685
Points : 564
Points : 564
Je verrais bien un preg_match_all avec pour masque un truc comme '#<img (.+)>#' et ensuite un strpos du border="0" sur chaque valeur du tableau, si false, un str_replace.
Xunil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 16h10   #5
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
merci je vais tester les deux methodes
je reviens pour donner le resultat
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2006, 16h18   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
Citation:
Envoyé par jml94
Je propose de faire en plusieurs étapes, c'est pas forcément le plus performant, mais est plus facile à maintenir :

//récupérer le contenu de la balise img, la ligne étant stockée dans $ligne
$contenu_img = preg_replace("/<img (.*?) \/>/", $1, $ligne);

//test de la présence de border=0
$test = preg_match("/border=\"0\"/", $contenu_img)

// remplacement
if (!$test) preg_replace("/style=\"margin:5px;\"/", "style=\"margin5px; 1px solid #ff6600\"/, $ligne);

ou un truc du genre, je n'ai pas le temps de tester la syntaxe exact...
oui mais cette methode est valable pour une image

mais le souci est que l'utilisateur peut saisir une texte et insérer les images ou bon lui semble en fait
ensuite je dosi parser le texte completement pour le traitement des images qui doivent etre en bordure et celle qui ne doivent pas avoir de bordure de 1px
pour l'instant la solution que j'avais trouver etait de forcer l'utilisateur a rajouter dans le bordure (formulaire) "0" lors de la saisie de son image pour ne pas ajouter de bordure

kenji
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2006, 09h08   #7
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
merci pour votre aide
j'ai reussi a modifier comme ceci si cela interesse je met le code

Code :
1
2
3
4
5
6
7
8
9
10
 
	preg_match_all('#<img (.+?)>#',$texte,$matches);
	for($i=0;$i<count($matches[1]);$i++){
		$pos = strpos($matches[1][$i],'border="0"');
		$pos2 = strpos($matches[1][$i],'class="img_news"');
		if($pos===false && $pos2===false){
			//par defaut on entoure en orange
			$texte = str_replace($matches[1][$i], 'class="img_news" '.$matches[1][$i] ,$texte);
		}
	}
kenji33 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 18h55.


 
 
 
 
Partenaires

Hébergement Web