8797 sujets

Développement web côté serveur, CMS

Bonjour à tous Smiley smile

Après avoir passé ma journée à chercher une solution par moi même et sur le web, je viens m'inscrire sur le forum afin de vous exposer mon problème.

Je souhaite rendre cliquable et modifier une url dans un texte soumis par formulaire.
J'arrive donc à garder le texte non url et à rendre cliquable les phrases type http:// etc etc.
Mais impossible de modifier l'url comme je le souhaite.



$pattern= "/(((http[s]?:\/\/)|(www\.))(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+|\.[a-z]+(\.[a-z]{2,2})?)\/?[,a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";

$monmessage = preg_replace($pattern, " <a href=\"".$http."$1\"".$replace." target=\"_blank\">$1</a>", $monmessage);
               	
return $monmessage;


Je souhaiterai réduire mon url avec un code type bit.ly mais impossible de ne récupérer que le ou les liens de mon texte. Y'a t'il un moyen de faire quelque chose dans ce gout la ?

$monmessage = preg_replace($pattern, 'file_get_contents('http://convertisseururl.com/?monurl=$1');', $monmessage);
ou $1 serait mon url à remplacer...

Je débute en code et j'imagine que le $1 n'est pas une variable dans ce cas, mais plutôt quelque chose comme un array. J'imagine aussi qu'on ne peut pas executer une fonction à l'intérieur du preg_replace... (_callback ?)

Je suis perdu ! thank you guyz pour votre aide Smiley smile
Salut,

moi je décomposerais le pb. je connais pas l'astuce qui permettrait d’écrire ça facilement

si ton pattern est bon

	$matches = array();
	preg_match_all($pattern,$monmessage,$matches);


enregistre les urls dans le tableau $matches.

puis tu prépares un tableau des urls sous la forme voulue (c'est quoi le bit.ly?) en appelant une fonction de call_back avec array_map. => résultat dans $replaces

mettre en forme aussi les matches pour qu'ils fassent des patterns

      $cibles = array_map(
		function ($value) { 
			return '!'.$value.'!'; 
		},$matches[0]
	);



un usage direct de
preg_replace($cibles,$replaces,$monmessage,1);
a très peu de chance de marcher
au vu de mes tests. il faudrait qu'aucunes urls se recoupent

je propose ça. j'ai testé sur un exemple simple ça avait l'air de marcher

$monmessage_change = '';
	
	foreach ($replaces as $key => $replace) {		
		$monmessage = preg_replace($cibles[$key],$replace,$monmessage,1);
		$pos = strpos($monmessage,$replace);
		$monmessage_change .= substr($monmessage , 0 ,$pos + strlen($replace));
		$monmessage = substr( $monmessage , $pos + strlen($replace) );
		
	}

	$monmessage_change  .= $monmessage;


Pascal
Modifié par CPascal (27 Oct 2011 - 20:15)
Bonjour Pascal et merci de ta réponse.

A quel moment dans ce que tu as mis, dois-je faire appel au résultat de la page qui me donne l'url raccourcie ?
il faut mettre le résultat dans $replaces.

je n'ai pas ecris cette partie.

c'est quelquechose comme

      $replaces = array_map(

		function ($value) { 

			return file_get_contents('http://convertisseururl.com/?monurl='.$value);

		},$matches[0]

	);