Aller au contenu

Conflit entre 2 expressions regulières


Sujets conseillés

Posté

Bonsoir à tous,

Voici un petit problème que je n'arrive pas à résoudre... J'ai une fonction qui doit transformer les URL en liens cliquables et une fonction de BBCode pour la balise image. Or, la balise [ IMG ] peut contenir ... une URL. et ma première fonction transforme alors l'url de l'image en lien clicable ; ce qui donne des : <img src="<a href=&quot;http://site.com/image.gif"> alt="" /> ... comment résoudre ce problème ? Voici les lignes de code, dans l'ordre

(PS : j'ai ajouté un espace après img dans la balise BB pour pouvoir poster sur ce forum)

function rogneurl1($url) 
{
$nb = strlen($url[0]);
$link = ($nb > 50) ? substr($url[0], 0, 50)."(...)" : $url[0];
$lien = '<a href="'.$url[0].'">'.$link.'</a>';
return $lien;
}
function rogneurl2($url)
{
$nb = strlen($url[4]);
$link = ($nb > 50) ? substr($url[4], 0, 50)."(...)" : $url[4];
$lien = $url[2].'<a href="http://www.'.$url[4].'">www.'.$link.'</a>';
return $lien;
}
function ck($img)
{
ini_set('allow_url_fopen', '1');
$image='';
if (@fclose(@fopen($img[1], 'r')))
{
$tab = getimagesize($img[1]); // on récupère la taille de l'image
$width = ($tab[0] > 370) ? ' width="370"' : '';
$image = '<img src="'.$img[1].'"'.$width.' alt="Image Utilisateur" />';
}
return $image;
}
function bbcode($chaine)
{
$chaine = preg_replace_callback('#\[img ](.+?)\[/img ]#si','ck',$chaine);
$chaine = preg_replace_callback("`(((ftp://)|(http(s?)://))(([[:alnum:]]|[-\%\.\?\=\#\_\:\&\/\~\+\@\,\;])*))`i",'rogneurl1',$chaine);
$chaine = preg_replace_callback("`(([^/])www\.|(^www\.))(([[:alnum:]]|[-\%\.\?\=\#\_\:\&\/\~\+\@\,\;])*)`i",'rogneurl2',$chaine);
}
?>

Posté

Il suffirait d'appeller la fonction BBCode avant ta fonction, au lieu de l'appeller après, non ?

Posté

Merci Dan, mais j'ai mis la fonction de bbcode img avant la transformation des urls ... ensuite, il y a d'autre fonctions bbcode qui celles ci doivent etre placées apres la transformation des url, mais je ne les ai pas retranscrites dans mon post.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...