Php regex
Bilow
-
Defouille Messages postés 404 Statut Membre -
Defouille Messages postés 404 Statut Membre -
Bonjour !
J'ai écrit un script PHP qui remplace les URL d'une phrase par des liens cliquables.
Je pense qu'il fonctionne bien, mais il se troñpe de lien lorsau'il y a plusieurs liens dans la phrase.
Et je ne vois vraiment pas comment faire.
Quelqu'un aurait-il une solution ?
Merci !
Code :
Note : Au début, je mets htmlentities(), parce que plus tard, je n'aurai pas le choix (la variable le sera par défaut).
J'ai écrit un script PHP qui remplace les URL d'une phrase par des liens cliquables.
Je pense qu'il fonctionne bien, mais il se troñpe de lien lorsau'il y a plusieurs liens dans la phrase.
Et je ne vois vraiment pas comment faire.
Quelqu'un aurait-il une solution ?
Merci !
Code :
$msg = htmlentities("Le lien est : http://domaine.be/hello/index.php#haut?bas ... Voila !");
$lien1 = preg_replace("#(.*)((http|https|ftp|mms)://[^ ]+)(.*)#", "$3://", $msg);
$lien2 = preg_replace("#(.*)((http|https|ftp|mms)://([^ ]+))(.*)#", "$4", $msg);
$lien_encode = str_replace(urlencode("/"), "/", $lien1.urlencode(html_entity_decode($lien2)));
$lien_encode = str_replace(urlencode("#"), "#", $lien_encode);
$lien_encode = str_replace(urlencode("?"), "?", $lien_encode);
$lien_href = "<a href='".$lien_encode."'>".$lien1.$lien2."</a>";
$msg = preg_replace("#(http|https|ftp|mms)://[^ ]+#", $lien_href, $msg);
echo $msg;
Note : Au début, je mets htmlentities(), parce que plus tard, je n'aurai pas le choix (la variable le sera par défaut).
A voir également:
- Php regex
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Regex ne commence pas par - Forum Programmation
- Retour à la ligne php ✓ - Forum PHP
- Retour a la ligne avec Echo comment faire ? - Forum Webmastering
1 réponse
Bonjour,
voila une petite procédure qui fait ce que tu veux, il faudra ajouter l'url_encode je crois, enfin voila :
En espérant que ça te soit utile.
NB : (la fin des liens n'est considéré que comme un espace, si le lien a une virgule après ou s'il est entre parenthèses cette version ne marchera pas, il faudra la modifier ^^)
voila une petite procédure qui fait ce que tu veux, il faudra ajouter l'url_encode je crois, enfin voila :
$msg_base = htmlentities("Le lien est : http://domaine.be/hello/index.php#haut?bas ... Voila et https://www.google.fr/?gws_rd=ssl !");
$msg = $msg_base ;
$new_msg = "";
while(preg_match("#(http|https|ftp|mms)://[^ ]+#", $msg))
{
$debut_lien = strpos($msg, "http://");
$temp = strpos($msg, "https://") ;
if($debut_lien === false || ($temp !== false && $temp <$debut_lien))
$debut_lien = strpos($msg, "https://") ;
$temp = strpos($msg, "ftp://") ;
if($debut_lien === false || ($temp !== false && $temp <$debut_lien))
$debut_lien = strpos($msg, "ftp://") ;
$temp = strpos($msg, "mms://") ;
if($debut_lien === false || ($temp !== false && $temp <$debut_lien))
$debut_lien = strpos($msg, "mms://") ;
$fin_lien = strpos($msg, " ", $debut_lien);
$lien = substr($msg, $debut_lien, $fin_lien-$debut_lien);
//echo "=>".$lien."<br/>";
$new_msg.=substr($msg, 0, $debut_lien);
$new_msg.='<a href="'.$lien.'">'.$lien.'</a>';
$msg = substr($msg, $fin_lien);
}
$new_msg.=$msg;
echo $msg_base."<br/>";
echo $new_msg ;
En espérant que ça te soit utile.
NB : (la fin des liens n'est considéré que comme un espace, si le lien a une virgule après ou s'il est entre parenthèses cette version ne marchera pas, il faudra la modifier ^^)