Page 1 sur 1

Extraire une url d'une chaine

Posté : 26 mai 2006, 14:25
par RobertVonTagada
Bonjours à tous !

Voilà, je suis en train de traiter un contenu de message pour un forum type phpBB.
En gros, j'ai un script qui traite mon contenu à l'affichage, et entre autre, une expression régulière qui gère l'affichage d'une image :
$CorpMessage = eregi_replace( "\[img\]([^]]*)\[/img\]","<img src=\"\\1\">",$CorpMessage);
Avant ça, j'aurai souhaité récupérer l'url de cette image afin de la vérifier.
Malheureusement je n'y arrive pas :cry:

J'ai testé comme ça :
$Result = preg_split("\[img\]([^]]*)\[/img\]", $CorpMessage);
Mais $Result ne me retourne rien.

Pour faire simple, comment extraire une url d'une chaine qui pourrait se trouver entre [ img] et [ /img] (sans espace bien sur).

Par avance, merci.

Posté : 26 mai 2006, 14:32
par agité
En supprimant le chemin jusqu'a l'image, tu choisis de prendre en fait que ce qui precede comme mot le .extension et en verrifiants l'extension

enfin je sais pas si c'est clair...

Posté : 26 mai 2006, 14:49
par RobertVonTagada
Rarf... non malheureusement, c'est pas trés clair en faite.

J'ai beaucoup de mal avec les expressions régulières.
Je vais pas cacher que celle que j'utilise est un simple copier-coller qui, ma foi, fonctionne.

En faite, ton idée est pas forcement mauvaise (si j'ai bien compris là où tu veux en venir) mais si dans mon contenu j'ai, par exemple, "blalbla tu prend ton image /tatata/img.jpg", il faudra pas récupérer ce "/tatata/img.jpg"... c'est belle et bien l'url qui va se trouver entre les balises [ img] et [ /img] que je voudrai extraire.

Posté : 26 mai 2006, 15:19
par Truc
Utilise preg_match_all()
$message=preg_match_all('`\[img]([^[]+)\[/img]`s',$CorpMessage);  ,$retour); 
tu récupères un tableau ($retour) avec les différentes url relevées.

Posté : 26 mai 2006, 15:31
par RobertVonTagada
Yes !
ça m'a l'air d'être bon ^^

Merci bien !

ps : ...heu... j'peux pas mettre [resolu] vu que je ne m'étais pas enregistré :cry:

Posté : 26 mai 2006, 18:01
par RobertVonTagada
Et voilà !! J'viens d'en finir avec mon petit soucis.

Le but, concrètement, était d'empêcher l'affichage d'image trop grande sur un forum... enfin non, pas empêcher, mais réduire plutot.

Voilà ce que ça donne au final :
$newWidth = 500;
$newHeight = 500;				
preg_match_all('`\[img]([^[]+)\[/img]`s', $CorpMessage ,$retour); 
$countIMG = count($retour[1]);
for ($i=0; $i<$countIMG; $i++) {
	$size = getimagesize($retour[1][$i]);
	$ratioWidth = $size[0]/$newWidth; 
	$ratioHeight = $size[1]/$newHeight; 
	// taille maximale dépassée ? 
	(($ratioWidth > 1) || ($ratioHeight > 1)) { 
		if ($ratioWidth < $ratioHeight) { 
			$destWidth = $size[0]/$ratioHeight; 
			$destHeight = $newHeight; 
		} else { 
			$destWidth = $newWidth; 
			$destHeight = $size[1]/$ratioWidth;
		} 
	} else {
		$destWidth = $size[0]; 
		$destHeight = $size[1];
	}
	$CorpMessage = str_replace($retour[0][$i],"<img src=\"".$retour[1][$i]."\" width=".$destWidth." height=".$destHeight.">", $CorpMessage);
}