[Résolu] Appel de fonction php lors d'un preg_replace
Posté : 19 oct. 2011, 14:44
Hello!
Dans mon bbcode, j'appelle une fonction pour complété les liens (ajouté http://, etc..).
Voici le code:
Le soucis vient de cette partie du code:
Mais lorsque je fais <img >xxx.png</img> Voici ce que j'obtiens:
La fonction n'est donc pas appelée...
Je ne comprends pas. Pourtant les deux lignes sont pratiquement les mêmes et les fonctions aussi. D'un coté la fonction est exécuté sans problème et de l'autre, la fonction n'est pas exécuté mais le text ressort tel quel...
(je n'ai pas mis toute la page pour pas trop encombrer)
Merci de m'éclairer!
Tex
Dans mon bbcode, j'appelle une fonction pour complété les liens (ajouté http://, etc..).
Voici le code:
function handle_img_tag($url)
{
$full_url = str_replace(array(' ', '\'', '`', '"'), array('%20', '', '', ''), $url);
if (strpos($url, 'www.') === 0) // If it starts with www, we add http://
$full_url = 'http://'.$full_url;
else if (strpos($url, 'ftp.') === 0) // Else if it starts with ftp, we add ftp://
$full_url = 'ftp://'.$full_url;
else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah)) // Else if it doesn't start with abcdef://, we add http://
$full_url = 'http://'.$full_url;
$img_tag = '<img src="'.$full_url.'" alt="image" />';
return $img_tag;
}
//
// Truncate URL if longer than 55 characters (add http:// or ftp:// if missing)
//
function handle_url_tag($url, $link = '')
{
global $pun_user;
$full_url = str_replace(array(' ', '\'', '`', '"'), array('%20', '', '', ''), $url);
if (strpos($url, 'www.') === 0) // If it starts with www, we add http://
$full_url = 'http://'.$full_url;
else if (strpos($url, 'ftp.') === 0) // Else if it starts with ftp, we add ftp://
$full_url = 'ftp://'.$full_url;
else if (!preg_match('#^([a-z0-9]{3,6})://#', $url, $bah)) // Else if it doesn't start with abcdef://, we add http://
$full_url = 'http://'.$full_url;
// Ok, not very pretty :-)
$link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' … '.substr($url, -10) : $url) : stripslashes($link);
return '<a href="'.$full_url.'">'.$link.'</a>';
}
$pattern = array('!\<img\>(.+)\</img\>!isU',
'#\<lien url="([^\[<]*?)\">(.*?)\</lien\>#e');
$replace = array('handle_img_tag(\'$1\')',
'handle_url_tag(\'$1\', \'$2\')');
// This thing takes a while! :)
$text = preg_replace($pattern, $replace, $text);
Une partie du code est pomper sur forum fluxbb.Le soucis vient de cette partie du code:
$pattern = array('!\<img\>(.+)\</img\>!isU',
'#\<lien url="([^\[<]*?)\">(.*?)\</lien\>#e');
$replace = array('handle_img_tag(\'$1\')',
'handle_url_tag(\'$1\', \'$2\')');
// This thing takes a while! :)
$text = preg_replace($pattern, $replace, $text);
Lorsque je fais <lien url="xxx">lien</lien> tout va bien, ça donne le résultat voulu.Mais lorsque je fais <img >xxx.png</img> Voici ce que j'obtiens:
Code : Tout sélectionner
handle_img_tag('xxx.png')Je ne comprends pas. Pourtant les deux lignes sont pratiquement les mêmes et les fonctions aussi. D'un coté la fonction est exécuté sans problème et de l'autre, la fonction n'est pas exécuté mais le text ressort tel quel...
(je n'ai pas mis toute la page pour pas trop encombrer)
Merci de m'éclairer!
Tex