affichage des liens en double

Eléphant du PHP | 119 Messages

18 janv. 2011, 13:14

bonjour,
voila j'ai un resultat qui s'affiche du genre si je tape http://google.fr il s'affiche correctement.
je voudrais mettre un preg_replace pour rendre ce lien cliquable mais pas les texte sans htt://.

j'ai donc tester comme suit :
$statut_resize = $this->correct_news(utf8_encode(stripslashes($this->content)),65,$size_pseudo);
$statut_resize = preg_replace('#http://[a-z0-9._/-?]+#i', '<a href="$0">$0</a>',$statut_resize);
$html .= "<span class='piece_news_content'>".$statut_resize."</span>";
le resultat a l'affichage me donne :
http://google.fr">http://google.fr 
il m'affiche 2 liens cliquables mais seul le premier fonctionne bien le deuxieme se fini par </a>.

merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 janv. 2011, 14:03

salut,

essai avec ce motif ça devrais t'aller :)
<?php
$pattern = '`(((f|ht){1}tp://)([-a-zA-Z0-9@:%_\+.~#?&//=]+))`is';
$subject = 'http://www.google.fr

du texte avec une url au milieu pour aller sur http://www.phpfrance.com ou bien http://php.net

pis la la fin
';
$replacement = '<a href="$0">$4</a>';
$rep = preg_replace($pattern, $replacement, $subject);
echo $rep;
?>
résultat :

Code : Tout sélectionner

<a href="http://www.google.fr">www.google.fr</a> du texte avec une url au milieu pour aller sur <a href="http://www.phpfrance.com">www.phpfrance.com</a> ou bien <a href="http://php.net">php.net</a> pis la la fin
je l'ai trouvé a l'aide de http://gskinner.com/RegExr/

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 119 Messages

18 janv. 2011, 14:14

en faite $statut_resize m'affiche le resulat mais non cliquable.

j'ai donc modifier le code :
$html .= "<div class='piece_news'>";	
	$html .= "<strong><a  href=\"profil-".$owner->get_id().".html\">".$owner->get_firstname()." ".$owner->get_name()."</a></strong> : ";
	$size_pseudo = strlen($owner->get_firstname()." ".$owner->get_name()." : ");
	$statut_resize = $this->correct_news(utf8_encode(stripslashes($this->content)),65,$size_pseudo);
	$statut_resize = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\" target=\"_blank\">\\0</a>",$statut_resize);
        $html .= "<span class='piece_news_content'>".$statut_resize."</span>";
						 
mais le soucis c'est qu'ils s'affiche deux fois, les deux lien sont cliquable mais le resultat affiche deux liens avec "> entre les deux.

Code : Tout sélectionner

http://google.fr">http://google.fr
comme si il manquait quelque chose dans la chaine ..