Extraire une url d'une chaine

RobertVonTagada
Invité n'ayant pas de compte PHPfrance

26 mai 2006, 14:25

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.

Mammouth du PHP | 965 Messages

26 mai 2006, 14:32

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...

RobertVonTagada
Invité n'ayant pas de compte PHPfrance

26 mai 2006, 14:49

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

26 mai 2006, 15:19

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.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 13 Messages

26 mai 2006, 15:31

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:

Eléphanteau du PHP | 13 Messages

26 mai 2006, 18:01

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);
}